使用MaxCompute(原ODPS)javasdk執行安全相關命令

隱林發表於2016-10-26

轉自zhenhong

使用 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();
    }
  }
}

執行結果:
34

程式執行完成後,在 odps console 中執行 `desc test_lable;` 命令,可以看到 set label 已經生效了。

DingTalk20161017205014

其他安全相關的命令,都可以這樣子通過 odps sdk 來執行呢,快來試試吧!

歡迎加入“數加·MaxCompute購買諮詢”釘釘群(群號: 11782920)進行諮詢,群二維碼如下:

96e17df884ab556dc002c912fa736ef6558cbb51  


相關文章