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

转自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();
    }
  }
}

运行结果:

程序运行完成后,在 odps console 中运行 `desc test_lable;` 命令,可以看到 set label 已经生效了。

其他安全相关的命令,都可以这样子通过 odps sdk 来运行呢,快来试试吧!

阅读原文请点击

时间: 2024-10-18 00:30:14

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

java如何运行OS命令(转)

javac TestRunTime.java java TestRunTime hostname // 执行“hostname”Linux命令 即可看到输出 public class TestRunTime {   public static void main(String[] args) throws IOException, InterruptedException { String cmd = ""; if(args == null || args.length == 0){

使用MaxCompute Java SDK 执行任务卡住了,怎么办?

场景一用户AA: "亲,用 MaxCompute Java SDK 跑作业,为什么卡住不动了?"me: "有 Logview 吗?发来看下"A: "没有,我用的是SDK,没Logview" 场景二用户BB :"亲,用 MaxCompute Java SDK 访问 Table,为什么卡住半天没反应?"me:"卡在哪一行了?"B:"就 RestClient retry 然后卡住了" 去繁就简

安装Java SDK,搭建运行环境

百度搜索:java se development kit,就可以下载Java SDK了,最新版本的是8.0的. 下载地址:jdk-8u11-windows-i586.1406279697.exe 当然也可以到官方去下载. 安装这里就不发图,大家一直可以点下一步了. 我的安装在D盘. 安装后我们找到安装目录的bin目录,并复制它,我的是:D:\Program Files (x86)\Java\jdk1.8.0_11\bin 再右击桌面上的"计算机",选择"属性",打开

【转载】Java JVM 运行机制及基本原理

原博地址:https://zhuanlan.zhihu.com/p/25713880 JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机. JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统"听",告诉它我们的程序需要做什么操作. 我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统

解决Please ensure that adb is correctly located at &#39;D:\java\sdk\platform-tools\adb.exe&#39; and can be executed.

遇到问题描述: 运行android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error has occured.    [2012-07-18 16:18:26 - ] You must restart adb and Eclipse.    [2012-07-18 16:18:26 - ] Please ensure that adb is correctly located at

&lt;Chapter 2&gt;2-1-2.安装Java SDK

Java运行时环境的App Engine SDK运行在任何运行了Java SE开发工具(JDK)的电脑上.Java SDK App Engine 支持JDK 6,并且当运行App Engine的时候,Java 运行时环境使用Java6的JVM和JRE.(JDK5支持是受限的并且过时了) 如果你还未拥有它,你可以从Oracle的网站上下载和安装适用于大部分平台的Java 6 JDK.(Mac用户,参看下一部分): http://www.oracle.com/technetwork/java/jav

java\sdk\platform-tools\adb.exe&#39; and can be executed.

遇到问题描述: 运行android程序控制台输出 The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse.Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be executed. 解决问题: 百度google大家多说的是任务管理

【原】JAVA开发环境搭建

1.JDK下载并安装,以jdk-7u45-windows-i586.exe为例(注意JDK的安装和JRE的安装是分开的) 2.“我的电脑”右键属性,找到“高级系统设置”,找到“高级”tab下的“环境变量” 3."系统变量"中新建JAVA_HOME变量,内容填写JDK安装路径(D:\Java\jdk) 4.“系统变量”中查找Path变量,在变量值最后输入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; (注意如果Path中已有的内容最后没有分号,需要先补上一个分号

Java虚拟机运行时数据区结构

本文部分参考自<Java虚拟机规范(Java SE 7版)>的中译本和周志明的<深入理解Java虚拟机>,另加个人理解.原书对Java虚拟机运行时数据区描述只有6页,同时参考其他网络网资料,个人能力所限,不排除存在认知错误. JVM将程序运行期间使用的内存划分为若干个运行时数据区,其中一些会随着虚拟机启动而创建,随着虚拟机退出而销毁.另外一些与线程一一对应,随着线程开始而创建,随着线程结束而销毁.数据区划分如下图所示意: Java堆(Java Heap) 在JVM中,Java堆是可