在您进行用户与权限管理配置前,您可以首先通过本文了解MaxCompute与DataWorks的用户权限管理区别。

用户管理

操作类型 MaxCompute用户管理 DataWorks用户管理
操作描述 应删除或锁定无属主、闲置以及离职人员的账号权限。通过DataWorks新增的用户,注意会可能授权于默认的角色。 准确添加和管理用户,应删除或锁定无属主、闲置以及离职人员的账号权限,严控管理员、运维权限。
操作角色 Project Owner或Admin Role。 项目管理员。
现状查看
  • 查看项目下的用户: list users;
  • 查看指定用户拥有的权限:show grants for <username>;
DataWorks项目管理 > 成员管理查看现有成员及角色,并确认各个成员权限的合理性。
赋权操作

成员仅加入MaxCompute Project,不在DataWorks项目成员中体现,且无任何权限。 需要结合对象操作role权限label权限才能使用,所以应关注成员是否拥有对象操作role权限label权限,并对相应授权进行清理。此外,可以添加云账号和RAM子账号。

在项目空间中添加用户:add user <username>;

DataWorks项目管理 > 成员管理添加成员和分配角色。
说明
  1. 只能添加该项目负责人账号下的RAM子账号为项目成员。
  2. 添加一个成员,并分配角色,可能会在MaxCompute赋予默认的role权限
回退操作 在项目空间中移除用户:remove user <username>; 清理成员或对应角色权限。删除后,会自动清除对应 MaxCompute内的用户和默认角色。

角色管理

操作类型 MaxCompute角色管理 DataWorks角色管理
操作描述

准确地创建角色并配置角色权限,及时清理离职或转岗人员的账号,清理角色中不必要开放的资源和权限。

MaxCompute项目空间创建成功后除了默认有Admin Role外,DataWorks创建了其他role

准确地分配角色。成员工作性质发生改变需及时改变角色,严格控制项目管理员和运维角色的分配。
操作角色 Project Owner或Admin Role。 项目管理员。
现状查看
  • 查看当前项目空间所有角色:list roles;
  • 查看角色中的权限:describe role <role_name>;
  • 查看某用户在什么角色中:show grants for <username>;

目前暂不支持查看某个角色被指派给哪些用户。

DataWorks项目管理 > 成员管理可以点击每个角色查看该角色下的成员。
赋权操作

MaxCompute除了默认的角色,还可以自定义角色,通过命令自定义角色权限并将角色授权给用户。

  1. 创建角色:create role <role_name>;
  2. 为角色授权:grant actions on object to <role_name>;
  3. 为用户授予角色:GRANT <roleName> TO <full_username> ;
此外,在DataWorks的项目管理 > MaxCompute高级配置- > 自定义用户角色页面,可以通过图形页面方式创建MaxCompute自定义角色、对角色进行授权、将角色授权给成员。
说明 通过命令行创建的角色不会在这个界面显示。
DataWorks角色是固定的,不允许自定义角色。成员添加到DataWorks项目时勾选角色分配给成员,该成员即可拥有对应角色的权限。
回退操作
  1. 删除角色中的用户:REVOKE <roleName> FROM <full_username>;
  2. 撤销对角色的授权:revoke <privList> on <objType> <objName> from role <rolename>;
  3. 删除角色:DROP ROLE <roleName>;

如果是通过DataWorks项目管理 > MaxCompute高级配置- > 自定义用户角色页面创建的角色,也通过这个页面进行回退操作。

DataWorks的角色不能删除,只能将某个成员的角色去掉。

ACL(对象操作)的授权管理

操作类型 说明
操作描述 回收非必须必要的对象操作授权,操作权限涉及多种操作对象和类型,应逐一确认。
操作角色 Project Owner或Admin Role。
现状查看
  • 查看指定用户的权限: show grants for <username>;
  • 查看当前用户的权限:show grants;
  • 查看指定对象的授权列表:show acl for <objectName> [on type <objectType>];
  • 查看某Package赋权情况案例:show acl for alipaydw.alipaydw_for_alisec_app on type package;
赋权操作

进行某对象的操作赋权:grant actions on object to subject;

操作、主体、客体类型的表达式如下:
  • actions类型: action_item1, action_item2, ...
  • object类型:project project_name,table schema_name ,instance inst_name ,function func_name ,resource res_name
  • subject类型:user full_username ,role role_name

有关操作、主体、客体类型的更多信息,请参见授权

回退操作 回收某对象的操作权限: revoke actions on object from subject;

Package授权管理

操作类型 说明
操作描述 开启ProjectProtection的项目如果没有在同一个互信项目组(TrustedProject Group),则必须使用Package方式赋权,Package赋权有两种方式。请确保Package合理打包和赋权,无闲置Package赋权。
操作角色 Project Owner。
现状查看
  • 了解本项目Package创建及赋权情况:
    • 查看已创建和已安装的Package列表:show packages;
    • 查看Package详细信息: describe package <pkgname>;
  • 本项目安装的Package,对用户的授权情况:show acl for <project_name.package_name> on type package;
赋权操作 Package创建者:
  1. 创建Package:create package <pkgname>;
  2. 将分享的资源添加到Package:add project_object to package package_name [with privileges privileges];。project_object表达式:table table_name ,instance inst_name ,function func_name ,resource res_name
  3. 许可其它项目空间使用Package: allow project <prjname> to install package <pkgname> [using label<number>];
Package使用者:
  1. 安装Package:install package <pkgname>;
  2. 将Package赋权给用户、角色,Pckage赋权给具体用户时,不能指定Label(Project Owner或Admin都可操作):grant actions on package <pkgName> to user <username>;grant actions on package <pkgName> to role <role_name>;

关于actions类型的说明,请参见授权。通常,将Package的Read权限赋给对象,即可满足对象访问Package中资源的需求。完成授权后,使用方在读Package中的表时,表名的写法为:表所属Project名称.表名。

回退操作
  1. 撤销其他项目空间使用Package的许可:disallow project <prjname> to install package <pkgname>;
  2. 删除Package:delete package <pkgname>;
  3. 将分享的资源移出Package:remove project_object from package package_name;

    project_object表达式: table table_name ,instance inst_name ,function func_name ,resource res_name

  4. 撤销Package的用户、角色的权限:revoke actions on package <pkgName> from user <username>;revoke actions on package <pkgName> from role <role_name>;

Label授权管理

操作类型 说明
操作描述 Maxcompute的字段、表、Package分为1~4个等级,应根据用户实际需要,赋予对应的Label权限。
操作角色 Project Owner。
现状查看
  • 查看一个用户能访问哪些敏感数据集:SHOW LABEL [<level>] GRANTS [FOR USER <username>];
    • 省略[FOR USER <username>]时,可以查看当前用户所能访问的敏感数据集。
    • 省略<level>时,将显示所有Label等级的授权。
    • 如果指定<level>,则只显示指定等级的授权。
  • 查看一个敏感数据表能被哪些用户访问:SHOW LABEL [<level>] GRANTS ON TABLE <tablename>;。 执行结果将显示指定Table上的Label授权。
  • 查看一个用户对一个数据表的所有列级别的Label权限:SHOW LABEL [<level>] GRANTS ON TABLE <tablename> FOR USER <username>;。 执行结果将显示指定用户对指定Table上列级别的Label 授权
赋权操作
  • 为用户赋予单个表或字段的安全许可标签:GRANT LABEL <number> ON TABLE <tablename>[(column_list)] TO USER <username> [WITH EXP <days>]; 。 默认180天后标签过期。示例如下:
    • 显式授权alice访问t1表中敏感度不超过2级的数据,授权有效期为1天:GRANT LABEL 2 ON TABLE t1 TO USER alice WITH EXP 1;
    • 显式授权alice访问t1(col1, col2)中敏感度不超过3级的数据,授权有效期为1天: GRANT LABEL 3 ON TABLE t1(col1, col2) TO USER alice WITH EXP 1;
  • 给用户授权整个项目的安全许可标签:SET LABEL <number> TO USER <username>;
  • 控制Package安装者对Package中敏感资源的许可访问级别:ALLOW PROJECT <prjName> TO INSTALL PACKAGE <pkgName> [USING LABEL <number>];。 由Package创建者授权,授予Package安装者对Package中敏感资源的许可访问级别。
  • 将Package赋权给用户、角色,Package赋权给具体用户时,不能指定Label:grant actions on package <pkgName> to user <username>;grant actions on package <pkgName> to role <role_name>;
回退操作
  • 撤销用户单个表或字段的安全许可标签:
    • 撤销授权: REVOKE LABEL ON TABLE <tablename>[(column_list)] FROM USER <username>;

      撤销alice对t1表的敏感数据访问:REVOKE LABEL ON TABLE t1 FROM USER alice;

    • 清理过期的授权: CLEAR EXPIRED GRANTS;
  • 更改用户授权整个项目的安全许可标签,默认等级为0:SET LABEL <number> TO USER <username>;
  • 更改Package安装者对Package中敏感资源的许可访问级别,调整为其它级别,默认为0:ALLOW PROJECT <prjName> TO INSTALL PACKAGE <pkgName> [USING LABEL <number>];
  • 撤销Package的用户、角色的权限:revoke actions on package <pkgName> from user <username>;revoke actions on package <pkgName> from role <role_name>;