使用MaxCompute Console的同學,可能都使用過MaxCompute安全相關的指令。官方文檔上有詳細的MaxCompute 安全指南 ,并給出了 安全相關語句彙總
。
簡而言之,
權限管理 、 列級别通路控制 項目空間安全配置 以及 跨項目空間的資源分享都屬于 MaxCompute 安全指令相關的範疇。
再直白一點,以下列關鍵字開頭的指令,都是MaxCompute安全相關操作指令:
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 ...
那麼,這些能在 MaxCompute Console 上運作的指令,該如何使用 MaxCompute Java SDK 運作呢?它們是與 SQL 一樣通過建立 instance 的方式來運作嗎?
答案:不可以,這些指令不是 SQL , 不可以通過 SQL Task 來運作。
需要使用接口
SecurityManager.runQuery()
來運作。
詳細 SDK Java Doc 戳這裡
SecurityManager
類在 odps-sdk-core 中,是以在使用時請添加依賴:
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>0.29.11-oversea-public</version>
</dependency>
下面通過一個例子來示範如何通過 MaxCompute 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();
}
}
}
運作結果:

程式運作完成後,在 MaxCompute Console 中運作 `desc test_lable;` 指令,可以看到 set label 已經生效了。
其他安全相關的指令,都可以這樣子通過 MaxCompute Java SDK 來運作呢,快來試試吧!