使用 MaxCompute(原ODPS) java sdk 運行安全相關命令

摘要: 使用 odps console 的同窗,可能都使用過 odps 安全相關的命令。html

轉自zhenhongjava

 

使用 MaxCompute console 的同窗,可能都使用過 odps 安全相關的命令。官方文檔上有詳細的 odps 安全指南,並給出了安全相關命令列表sql

簡而言之,權限管理項目空間安全配置以及用戶及受權管理都屬於 odps 安全命令相關的範疇。api

再直白一點,如下列關鍵字開頭的命令,都是 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 ...this

 

那麼,這些能在 odps console 上運行的命令,該如何使用 odps sdk 運行呢?它們是與 sql 同樣經過建立 instance 的方式來運行嗎?htm

不能夠,這些命令不是 sql , 不能夠經過 sql task 來運行。blog

須要使用接口 SecurityManager.runQuery() 來運行。詳細 javadoc 戳這裏接口

SecurityManager 類在 odps-sdk-core 中,所以在使用時請添加依賴:ip

 

<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 來運行呢,快來試試吧!

 

原文連接

閱讀更多幹貨好文,請關注掃描如下二維碼:

相關文章
相關標籤/搜索