需求场景:通过DataWorks简单模式项目使用MaxCompute,项目设置MaxCompute访问身份为“个人账号”,当成员子账号为开发角色时,对MaxCompute Project默认可删除所有表的权限。然而业务需求有些表非常重要,不允许开发角色进行删除同时要求杜绝误删,假设这些表名都是以tb_开头。
操作步骤:
1、在客户端创建role ,这里我创建的角色名为test
create role + role_name
2、通过policy 方式授权project_test项目下,禁止删除 tb_* 开头的所有表,权限赋予test角色。链接和命令如下:
https://help.aliyun.com/document_detail/162576.html?spm=a2c4g.11174283.6.936.3d36590e82MdUv
grant drop on table tb_* to role test privilegeproperties("policy" = "true", "allow"="false");
3、将test角色赋予子账号。链接和命令如下:
https://help.aliyun.com/document_detail/27935.html?spm=a2c4g.11186623.6.932.1bee77ccDP44gr
grant test to + 子账号
4、通过dataworks设置子账号为开发角色。
(1)、登录到Dataworks首页,后点击右上方的小扳手进入工作空间配置页面。
(2)、进入页面后点击成员管理进行子账号角色配置。
(3)、在MaxCompute客户端执行下面的命令,将test角色权限授予子账号,格式如下:
grant test to + 子账号名
(4)、在MaxCompute客户端登录子账号,进行权限的查看,命令如下:
show grants for + 子账号名
(5)、子账号删除tb开头表的测试如图:
结论:通过policy可以用roles的方式进行权限控制。
参数说明:
• privilegeproperties中的{"policy" = "true"}表示当前为Policy授权。
• privilegeproperties中的{"allow"="[true|false]"}表示本次授权为白名单形式授权。黑名单形式授权为 {"deny"=" [true|false]"}。
• revoke只有allow、objectName和rolename三个参数对应时才会生效。
注意点:
1、如果不知道账号名,可以通过 whoami 命令查看
2、添加的用户名username既可以是云账号(即在阿里云官网上注册过的有效邮箱地址),也可以是执行此命令的云账号的某个RAM子账号。