使用 MaxCompute console 的同学, 可能都使用过 odps 安全相关的命令官方文档上有详细的 odps 安全指南, 并给出了安全相关命令列表
简而言之, 权限管理项目空间安全配置以及用户及授权管理都属于 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 戳这里
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();
- }
- }
- }
运行结果:
程序运行完成后, 在 odps console 中运行 `desc test_lable;` 命令, 可以看到 set label 已经生效了
其他安全相关的命令, 都可以这样子通过 odps sdk 来运行呢, 快来试试吧!
来源: http://geek.csdn.net/news/detail/257246