本文为您介绍如何在MaxCompute Console上使用Java SDK接口的SecurityManager.runQuery()方法运行安全相关的命令。

背景信息

用户运行安全相关的命令有以下两种方式:
  • 通过使用MaxCompute Console 运行,详细的使用说明请参见安全指南安全相关语句汇总
    以下关键字开头的命令为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  ...
  • 使用Java SDK接口SecurityManager.runQuery()方式运行,详细的SDK使用说明请参见MaxCompute SDK Java Doc
    说明 MaxCompute安全相关的命令不是SQL命令,不能创建instance通过SQL Task方式来运行。

前提条件

在开始使用Java SDK接口方法运行安全命令之前,您需要做如下准备工作:
  1. 准备IntelliJ IDEA开发工具,请参见安装Studio
  2. 准备AccessKey ID和AccessKey Secret。
    您可以登录阿里云官网,在右上角的用户名下单击accesskeys进入AccessKey管理页面获取,如下图。

  3. 配置Endpoint,详细内容请参见配置Endpoint
  4. 创建空间项目<your_project>,通过IntelliJ IDEA MaxCompute Studio创建MaxCompute项目连接
  5. 在MaxCompute Studio上添加项目依赖。

    SecurityManager类在odps-sdk-core包中,因此在使用时需要做如下配置。

    <dependency>
      <groupId>com.aliyun.odps</groupId>
      <artifactId>odps-sdk-core</artifactId>
      <version>0.29.11-oversea-public</version>
    </dependency>
准备工作完成后,您可以开始运行安全命令示例操作。例如,设置表test_label列的访问级别为2,运行如下命令。
SET LABEL 2 TO TABLE test_label(key, value);

实施步骤

  1. 创建测试表test_label,命令如下。
    CREATE TABLE IF NOT EXISTS test_label(
     key  STRING,
     value BIGINT
    );
  2. 测试运行。
    • Java代码
      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>");
            // 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();
          }
        }
      }
    • 查看运行结果。

  3. 结果验证。
    程序运行完成后,在MaxCompute Console中运行desc test_label命令,可以看到set label命令已经生效了。

    其它安全相关的命令,都可以通过Java SDK来运行。

更多信息

了解更多安全命令操作相关的内容,可参考授权列级别访问控制项目空间的安全配置以及基于Package的跨项目空间的资源分享