本文为您介绍MaxCompute的权限管理常见问题。
问题类别 | 常见问题 |
授权方案 | |
为用户授权 | |
权限报错 |
如何跨项目读取数据?
您可以基于Package实现跨项目读取数据的功能,Package是一种跨项目共享数据及资源的机制,主要用于解决跨项目的用户授权问题。使用Package之后,项目管理员可以对其他项目需要使用的对象进行打包授权(也就是创建一个Package),然后许可其他项目安装此Package,其他项目管理员安装Package之后,就可以自行管理Package进一步授权给自己项目中的用户。
更多Package使用及权限控制信息,请参见基于Package跨项目访问资源和Package的权限控制。
MaxCompute项目的所有者能否更换为RAM用户?
项目所有者不可以更换,创建项目的人即是项目所有者。项目所有者可以将Admin角色赋予RAM用户。
与项目所有者相比,Admin角色有哪些限制?
与项目所有者相比,Admin角色不能执行如下操作:
Admin角色不能将Admin权限指派给用户。
不能设定项目的安全配置。
不能修改项目的鉴权模型。
Admin角色所对应的权限不能被修改。
RAM用户无法访问DataWorks,提示缺少AccessKey ID,但实际有AccessKey ID,如何解决?
RAM用户需要在个人信息中绑定AccessKey信息。进入个人信息页面,单击修改AccessKey信息,输入AccessKey ID和AccessKey Secret。完成配置后,请您重新尝试访问DataWorks。
为RAM用户申请生产环境表的权限时,提示授权失败,如何解决?
问题现象
阿里云账号为RAM用户授权生产环境表的权限时,返回如下报错。
class java.lang.IllegalArgumentException: AccessId should not be empty.
产生原因
阿里云账号或RAM用户的AccessKey ID和AccessKey Secret未完成配置。
解决措施
使用阿里云账号或以RAM用户身份进入个人信息页面,确认是否已配置AccessKey ID和AccessKey Secret。如果未配置,单击修改AccessKey信息,输入AccessKey ID和AccessKey Secret。
如何授予用户操作表的权限?
需要由项目所有者或具备Super_Administrator、Admin角色的用户执行授权操作。您可以通过ACL授权方式(grant
)为用户授予表的相关操作权限。命令示例如下。
grant Update on table project_name to ram$bob@aliyun.com:Allen;
更多授权信息,请参见MaxCompute权限。
如何为RAM用户授权?
需要由阿里云账号或具备Super_Administrator、Admin角色的用户执行授权操作。更多授权信息,请参见MaxCompute权限。
权限管理中的客体(Object)和操作(Action)是什么?
MaxCompute授权涉及到三个要素:
主体(Subject):被授权的用户或角色。
客体(Object):为用户或角色授予的目标对象,例如项目(Project)、表(Table)、函数(Function)、资源(Resource)及实例(Instance)。
操作(Action):为用户或角色授予的可以对目标对象执行的操作。例如读、写、查表。
更多信息,请参见ACL权限控制。
RAM用户如何访问其他阿里云账号创建的项目?
假设现有两个阿里云账号A和B,A账号下有一个RAM用户账号C(ram_user_1),账号C需要访问账号B创建的MaxCompute项目。
账号B需要将账号A加入到账号B创建的项目中,同时账号B为账号A授予MaxCompute Super_Administrator角色。然后用账号A登录账号B的项目,通过执行add user ram$A:ram_user_1;
命令将账号C添加到账号B的项目中。
如何获取租户ID(tenant_id)?
当您需要在租户级别指定被授权的资源范围时,权限策略中可以指定租户,此时您需要获取租户ID,获取方法如下:
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏选择租户管理 > 租户属性。
在租户管理页面获取对应账号的租户ID。
为用户授权报错:“FAILED:Invalid account Name xxxxxx”,如何解决?
问题现象
为用户授权时,返回如下报错。
FAILED:Invalid account Name xxxxxx
产生原因
授权语句中的用户名无效。
解决措施
建议您确认用户名是否正确。可以通过执行
list users;
命令获取当前项目的用户列表,然后授权时直接复制用户列表中的用户名,避免手动输入拼写错误,导致用户名无效。
为用户授权报错:“FAILED: lack of account provider, principalName xxxxxx”,如何解决?
问题现象
为用户授权时,返回如下报错。
FAILED: lack of account provider, principalName xxxxxx
产生原因
授权语句中的用户名无效或当前项目支持的账号系统不支持RAM。
解决措施
建议您登录MaxCompute客户端,执行
list accountproviders;
命令查看MaxCompute项目空间支持的账号系统是否支持RAM。如果返回结果没有RAM,执行add accountprovider ram;
命令,增加对RAM账号体系的支持,并再次执行list accountproviders;
命令查看MaxCompute项目空间支持的账号系统已增加RAM。若确认项目支持RAM,仍然报错,则需要确认用户名是否正确。可以通过执行list users;
命令获取当前项目的用户列表,然后授权时直接复制用户列表中的用户名,避免手动输入拼写错误,导致用户名无效。
MaxCompute中有视图(View)查询权限,为什么执行查询时报错其他用户无权限而无法查询?
问题现象
MaxCompute中视图(ViewA)引用数据表B,用户A有ViewA的查询权限,执行查询ViewA时报错用户B(视图Owner)无数据表B的查询权限。
产生原因
当视图Owner(View Owner)缺失视图引用表的SELECT权限时,视图不可用。一般场景为视图Owner变更后,没有及时对新的Owner授予视图引用表的SELECT权限;或视图引用表的Owner撤销了视图Owner对引用表的SELECT权限。因此即使用户A有ViewA的查询权限,也无法进行视图的查询。
解决措施
建议您检查视图Owner(View Owner)是否丢失了视图引用表的SELECT权限,命令如下。
show grants for <user_name>; -- user_name为视图Owner的用户名称
若确认丢失,需要给View Owner重新添加视图引用表的SELECT权限,视图方可使用。
执行作业报错:You have NO privilege to do the restricted operation on xxx Access Mode is AllDenied如何解决?
产生原因
对应的项目为禁用状态。
解决措施
检查是否账号欠费或者是项目关联默认计算Quota为包年包月Quota而对应包年包月订单到期了。欠费或到期的话您充值、续费成功后会自动恢复为正常状态,恢复速度与您订单量、项目量相关,时间为2~30分钟不等。
非欠费/到期,则应该是手动禁用了,可以直接到MaxCompute控制台的项目管理页面恢复项目。
创建资源类型(Resource)的自定义角色报错:“failed to check policy format: invalid Action value - odps:<Action>”,如何解决?
问题现象
使用Policy权限控制功能,以创建资源类型(Resource)的角色test_role并授予该角色创建Package(CreatePackage)的权限为例,编写Policy授权如下:
{ "Statement":[ { "Action":[ "odps:CreatePackage" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project/authorization", "acs:odps:*:projects/test_project/authorization/packages/*", "acs:odps:*:projects/test_project/authorization/packages/*/*/*" ] } ], "Version":"1" }
返回如下报错。
Create role test_role error: [400] com.aliyun.odps.OdpsException: failed to check policy format: invalid Action value - odps:CreatePackage
产生原因
MaxCompute不支持对资源类型(Resource)角色授予项目管理类权限,而创建Package(CreatePackage)属于项目管理类权限。查看更多项目管理类权限,请参见项目管理类权限一览表。
解决措施
新建包含项目管理类权限的自定义角色时,切换角色类型为Admin(管理类型),即可创建成功。更多有关角色规划详情,请参见角色规划。