使用 MaxCompute(原ODPS) java sdk 运行安全相关命令

maoer · · 535 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

摘要: 使用 odps console 的同学,可能都使用过 odps 安全相关的命令。 转自zhenhong 使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命令。官方文档上有详细的 odps [安全指南](https://help.aliyun.com/document_detail/27924.html?spm=a2c4e.11153959.blogcont62331.18.297126631sJdNX),并给出了[安全相关命令列表](https://help.aliyun.com/document_detail/27939.html?spm=a2c4e.11153959.blogcont62331.19.297126631sJdNX)。 简而言之,[权限管理](https://help.aliyun.com/document_detail/27932.html?spm=a2c4e.11153959.blogcont62331.20.297126631sJdNX)、项[目空间安全配置](https://help.aliyun.com/document_detail/27937.html?spm=a2c4e.11153959.blogcont62331.21.297126631sJdNX)以及[用户及授权管理](https://help.aliyun.com/document_detail/27935.html?spm=a2c4e.11153959.blogcont62331.22.297126631sJdNX)都属于 odps 安全命令相关的范畴。 再直白一点,以下列关键字开头的命令,都是 odps 安全相关操作命令: ``` GRANT/REVOKE ... SHOW GRANTS/ACL/PACKAGE/LABEL/ROLE/PRINCIPALS SHOW PRIV/PRIVILEGES LIST/ADD/REOVE USERS/ROLES/TRUSTEDPROJECTS DROP/CREATE ROLE CLEAR EXPIRED GRANTS DESC/DESCRIBE ROLE/PACKAGE CREATE/DELETE/DROP PACKAGE ADD ... TO PACKAGE REMOVE ... FROM PACKAGE ALLOW/DISALLOW PROJECT INSTALL/UNINSTALL PACKAGE LIST/ADD/REMOVE ACCOUNTPROVIDERS SET LABLE ... ``` 那么,这些能在 odps console 上运行的命令,该如何使用 odps sdk 运行呢?它们是与 sql 一样通过创建 instance 的方式来运行吗? 不可以,这些命令不是 sql , 不可以通过 sql task 来运行。 **需要使用接口 SecurityManager.runQuery() 来运行。详细 [javadoc 戳这里](https://help.aliyun.com/document_detail/34614.html?spm=a2c4e.11153959.blogcont62331.23.297126631sJdNX)** `SecurityManager` 类在 odps-sdk-core 中,因此在使用时请添加依赖: ``` <dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-sdk-core</artifactId> <version>0.23.3-public</version> </dependency> ``` 下面通过一个例子来演示如何通过 odps java sdk 来设置表 test_label 列的访问级别为 2,也就是运行命令SET LABEL 2 TO TABLE test_label(key, value);。 ``` import com.aliyun.odps.Column; import com.aliyun.odps.Odps; import com.aliyun.odps.OdpsException; import com.aliyun.odps.OdpsType; import com.aliyun.odps.TableSchema; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; import com.aliyun.odps.security.SecurityManager; public class test { public static void main(String [] args) throws OdpsException { try { // init odps Account account = new AliyunAccount("<your_accessid>", "<your_accesskey>"); Odps odps = new Odps(account); odps.setEndpoint("http://service-corp.odps.aliyun-inc.com/api"); odps.setDefaultProject("<your_project>"); // create test table // if u already have a table, skip this TableSchema schema = new TableSchema(); schema.addColumn(new Column("key", OdpsType.STRING)); schema.addColumn(new Column("value", OdpsType.BIGINT)); odps.tables().create("test_label", schema); // set label 2 to table columns SecurityManager securityManager = odps.projects().get().getSecurityManager(); String res = securityManager.runQuery("SET LABEL 2 TO TABLE test_label(key, value);", false); System.out.println(res); } catch (OdpsException e) { e.printStackTrace(); } } } ``` 运行结果: ![图片描述](http://img.blog.csdn.net/20180327111732979?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 程序运行完成后,在 odps console 中运行 `desc test_lable;` 命令,可以看到 set label 已经生效了。 ![图片描述](http://img.blog.csdn.net/20180327111834621?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 其他安全相关的命令,都可以这样子通过 odps sdk 来运行呢,快来试试吧! [**原文链接**](https://yq.aliyun.com/articles/62331?spm=a2c41.11181499.0.0) **阅读更多干货好文,请关注扫描以下二维码:** ![图片描述](http://img.blog.csdn.net/20180327112123610?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

535 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传