开发快智能硬件开发
直播中

猫耳

6年用户 1436经验值
擅长:制造/封装
私信 关注
[经验]

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

摘要: 使用 odps console 的同学,可能都使用过 odps 安全相关的命令。
转自zhenhong

使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命令。官方文档上有详细的 odps 安全指南,并给出了安全相关命令列表
简而言之,权限管理项目空间安全配置以及用户及授权管理都属于 odps 安全命令相关的范畴。
再直白一点,以下列关键字开头的命令,都是 odps 安全相关操作命令:

GRANT/REVOKE ...SHOW  GRANTS/ACL/PACKAGE/LABEL/ROLE/PRINCIPALSSHOW  PRIV/PRIVILEGESLIST/ADD/REOVE  USERS/ROLES/TRUSTEDPROJECTSDROP/CREATE   ROLECLEAR EXPIRED  GRANTSDESC/DESCRIBE   ROLE/PACKAGECREATE/DELETE/DROP  PACKAGEADD ... TO  PACKAGEREMOVE ... FROM  PACKAGEALLOW/DISALLOW  PROJECtiNSTALL/UNINSTALL  PACKAGELIST/ADD/REMOVE   ACCOUNTPROVIDERSSET  LABLE  ...

那么,这些能在 odps console 上运行的命令,该如何使用 odps sdk 运行呢?它们是与 sql 一样通过创建 instance 的方式来运行吗?
不可以,这些命令不是 sql , 不可以通过 sql task 来运行。
需要使用接口 SecurityManager.runQuery() 来运行详细 javadoc 戳这里
SecurityManager 类在 odps-sdk-core 中,因此在使用时请添加依赖:

<dependency>        <groupId>com.aliyun.odpsgroupId>        <artifactId>odps-sdk-coreartifactId>        <version>0.23.3-publicversion>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("", "");      Odps odps = new Odps(account);      odps.setEndpoint("http://service-corp.odps.aliyun-inc.com/api");      odps.setDefaultProject("");      // 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 来运行呢,快来试试吧!

原文链接
阅读更多干货好文,请关注扫描以下二维码:


更多回帖

发帖
×
20
完善资料,
赚取积分