**背景:**用户在使用MaxCompute与DataWorks这两种权限模型不清楚,并且对于相关MaxCompute的权限执行语句也不太熟悉,以至于在自己的实际操作中不能建立完整的权限策略,导致权限控制的混乱,甚至在开发过程中时常遇到权限问题的错误,导致延误业务的推动进展,该篇文档集主要的权限知识点与一体,常用的MaxCompute权限语句,以及经典的开发环境和生产环境之间的赋权示例给大家做出做出介绍。
**一、MaxCompute的安全模型**
![1](https://yqfile.alicdn.com/255487b7ccafbc3d139d0090569bf520a3284d74.png)
**二、DataWorks安全模型**
![2](https://yqfile.alicdn.com/1382f01f7b908033d6b61467b2aaca11d984440f.png)
**三、子账户添加的限制**
![3](https://yqfile.alicdn.com/8f5f44ee5288f679e9324598527832a5a82b92b4.png)
**四、MaxCompute的授权管理图**
![4](https://yqfile.alicdn.com/0fe8289be704b7b60e9d977392ccdb4b0f9f5760.png)
**五、授权场景和注意事项**
![5](https://yqfile.alicdn.com/ce234fde8e467363281e6a69f089755dfe419dd2.png)
**六、移除用户的注意事项**
![6](https://yqfile.alicdn.com/731f4833a8cb0a7b256bb4eafb98136c56cf019a.png)
**七、成员管理的相关语句**
**查看成员:**
```
Project owner或admin命令行执行
List users; --查看成员列表
Show grants for <username>; -- 查看某成员权限
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**添加成员:**
```
1.DataWorks添加RAM子账号;
2.Project owner或admin命令行方式执行
add user <username> --可为RAM子账户或其他云账户
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**删除成员:**
```
1.DataWorks删除RAM子账号;
2.Project owner或admin命令行方式执行:
remove user <username>
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**八、角色管理的相关语句:**
**查看角色:**
```
查看role列表:List roles;
查看role中的权限:describe role <role_name>
查看某用户在什么role中:show grants for <username>
查看某个role都指派给那些user:目前不支持!
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**创建角色:**
```
创建role:Create role <role_name>;
给角色授权:grant actions on object to <role_name>
添加用户到角色:grant <roleName> TO <full_username>
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**删除角色:**
```
删除角色中的用户:REVOKE <roleName> FROM <full_usename>;
撤销对角色的授权:revoke <privList> on <objType> <objName> from role <rolename>
删除角色: DROP ROLE <roleName>
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**九、policy授权介绍**
Policy授权则是⼀种基于主体的授权。通过Policy授权的权限数据(即访问策略)被看做是授权主体的⼀种 ⼦资源。只有当主体(⽤户或⻆⾊)存在时才能进⾏Policy授权操作。当主体被删除时,通过Policy授权的 权限数据会被⾃动删除。 Policy授权使⽤MaxCompute⾃定义的⼀种访问策略语⾔来进⾏授权,允许或 禁⽌主体对项⽬空间对象的访问权限。
Policy授权机制,主要解决ACL授权机制⽆法解决的⼀些复杂授权场景,⽐如:
* ⼀次操作对⼀组对象进⾏授权,如所有的函数、所有以 “taobao” 开头的表
* 带限制条件的授权,如授权只会在指定的时段内才会⽣效、当请求者从指定的IP地址发起请求时授权才 会⽣效、或者只允许⽤户使⽤SQL(⽽不允许其它类型的Task)来访问某张表。
Policy授权语句格式如下:
```
GET POLICY; --读取项目空间的Policy
PUT POLICY <policyFile>; --设置(覆盖)项目空间的Policy
GET POLICY ON ROLE <roleName>; --读取项目空间中某个角色的Policy
PUT POLICY <policyFile> ON ROLE <roleName>; --设置(覆盖)项目空间中某个角色的Policy
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**policy基本术语**
* **主体(Principal) **主体(Principal)是指访问策略中的权限被指派的对象。⽐如,访问策略”允许张三在 2011年12⽉31⽇之前对资源SampleBucket执⾏CreateObject操作”中的主体是”张三”。
* **操作(Action) **操作(Action)是指主体对资源的访问⽅法。⽐如,访问策略”允许张三在2011年12⽉ 31⽇之前对资源SampleBucket执⾏CreateObject操作”中的操作是”CreateObject”。
* **资源(Resource) **资源(Resource)是指主体请求访问的对象。⽐如,访问策略”允许张三在2011年12 ⽉31⽇之前对资源SampleBucket执⾏CreateObject操作”中的资源是”SampleBucket”。
* **访问限制(Access Restriction) **访问限制(Access Restriction)是指权限⽣效的限制条件。⽐如,访 问策略”允许张三在2011年12⽉31⽇之前对资源SampleBucket执⾏CreateObject操作”中的限制 条件是”在2011年12⽉31⽇之前”。
* **效⼒(Effect) **授权效⼒包括两个⽅⾯:允许操作(Allow)和拒绝操作(Deny)。通常,Deny有更⾼ 的效⼒,在权限检查时会优先使⽤。 注意:“拒绝操作”和”撤销授权”是完全独⽴的两个概念,撤销授 权通常包括撤销对Allow和Deny这两种不同效⼒的授权,⽐如传统数据库⼀般⽀持Revoke和Revoke Deny两种操作
**授权语句(Statement)结构**
* Effect: 指明该条语句的权限类型,取值必须为Allow或Deny。
* Principal: 如果Policy在授权时是与⽤户或⻆⾊绑定,那么就不允许再指定Principal,⽐如 MaxCompute的Role Policy。 如果Policy在授权时是与项⽬空间或项⽬空间内的对象绑定,那么必 须指Principal,⽐如MaxCompute的Project Policy。
* Action: 它表示授权操作,可以是⼀个或多个操作名,可⽀持通配符号” ” 和 ” ? ” 。 例 如 , A c t i o n = “ ” 表示所有的操作。
* Resource: 它表示授权对象,可以是⼀个或多个对象名,可⽀持通配符号” ” 和 ” ? ” 。 例 如 R e s o u r c e = “ ” 表示所有的对象。
* Condition Block: 条件块是该条授权语句所述权限得以⽣效的条件。条件块结构请参⻅下节的描述。
**十、Policy的实际使用授权案例**
基于以前的经验,我们在odps项目中创建了两个基本的角色,分别是开发角色dev、查询角色adhoc。
```
create role dev;
create role adhoc;
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
我们对于角色的权限要求大概分如下两类:
* A开发权限:不能修改project属性但可以读取project信息,有建表、建资源、建Job等各种常用权限;可以修改、删除自己在开发库中创建的表,但对于其他同学创建的表则只有读取权限。
* B查询权限:只能读取project信息,不能建表、建资源、建Job;只能读取表,但没有任何修改、删除权限。
我们的安全策略大致是这样的:
* 开发库上,给所有开发同学赋予A开发权限。
* 生产库上,给所有开发同学赋予B查询权限。
[原文链接](https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/739645%3Futm_content%3Dg_1000094672)
本文为阿里云内容,未经允许不得转载。
分享到:
相关推荐
Shiro 的授权功能允许你定义角色(Role)和权限(Permission)。在示例中,可能会创建角色并分配给用户,然后通过hasRole()和isPermitted()等方法检查用户是否拥有执行特定操作的权限。这有助于实现细粒度的访问...
总的来说,这个示例项目提供了一个基础的权限管理系统框架,可以帮助开发者理解如何在SSH环境下实现用户、角色和权限的管理。通过学习和实践这个示例,可以提升你在实际项目中实现复杂权限控制的能力,为构建安全的...
1. **定义角色和权限**:首先,我们需要创建一个数据结构来存储角色和它们对应的权限。这可以通过自定义类或者数据库表来实现。例如,可以创建一个Role类,包含一个权限集合(如一个字符串数组,每个字符串代表一个...
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
1. **源代码**:通常包括Python模块和脚本,它们实现了与阿里云DataWorks服务的交互逻辑,如API调用、数据传输、任务管理等。 2. **文档**:可能包含README文件,提供了库的快速入门指南、安装步骤、使用示例等信息...
ASP.NET权限应用示例站点是基于微软的.NET框架构建的一个Web应用程序,主要展示了如何利用ASP.NET中的角色(Roles)和权限(Permissions)管理机制来实现用户访问控制。这个示例站点设计简洁,通过动态权限树和URL...
在“javaweb实现的访问权限控制示例”中,我们主要关注的是如何利用Filter进行权限校验。通常,我们会创建一个自定义的Filter类,继承自`javax.servlet.Filter`接口,并实现其`doFilter()`方法。在这个方法中,我们...
- 需要关注上传数据量与MaxCompute计费模型的关系,避免超出预算。 #### 四、具体案例分析 1. **案例一:处理数据中的特殊字符**: - **问题**: 数据中含有回车或空格如何处理? - **解决方法**: 更改数据的分隔...
你可以通过运行这个项目,学习如何配置Shiro,如何创建和管理数据库中的用户、角色和权限,以及如何在代码中检查用户权限。同时,这个项目也适用于已经熟悉Shiro的开发者,作为快速搭建权限管理系统的模板。
这个工具指南主要关注如何使用客户端工具与MaxCompute进行交互,实现数据的处理和分析。 首先,MaxCompute客户端是一个基于Java的程序,因此需要安装JRE 1.6版本才能运行。用户可以从官方链接下载客户端软件包,解...
6. **安全与权限控制**:在开发指南中,会详细介绍如何设置和管理用户权限,确保数据的安全性和访问控制。这可能涉及到角色、权限策略、安全组等概念。 7. **错误处理与调试**:开发过程中,可能会遇到各种错误,...
同时,本文档还对 DataWorks 的使用和配置进行了详细的指导,并提供了相关的示例和案例。 此外,本文档还包括了一些重要的法律声明和通用约定,旨在提醒用户在使用 DataWorks 产品时需要注意的一些重要事项。 本...
laravel-entrust-role-permission-panel, 使用 Laravel 和委托给角色分配权限的简单示例 #Panel: 角色和权限这个 repo 只是一个简单的例子,使用委托和定制面板编辑角色和权限,或者你可以简单地将权限分配给角色,...
标题提到的"MVC自定义权限控制示例代码"是一个很好的起点,它展示了如何通过继承`AuthorizeAttribute`来扩展MVC的安全功能。这个小样例可以帮助开发者更好地理解和实现基于角色或特定条件的访问控制。 首先,`...
一个Delphi权限管理示例程序,使用了数据库保存权限设置信息,比较简单点的权限设置程序,可为开发同类模块的Delphi爱好者提升程序参考。相关说明:由MainMenu1,ToolBar1动态维护权限 但这对四级内菜单有效 ...
SQL Server 提供了强大的角色和权限管理系统,示例数据库可以帮助你理解如何设置用户权限、创建登录账户、分配角色以及使用动态管理视图检查当前权限状态。 7. **性能优化**: 通过对示例数据库进行性能测试,...
仓储系统功能模块权限列表示例。
通过学习和实践这个示例程序,用户不仅可以掌握账号变量的使用方法,还能深入了解威纶通触摸屏的编程逻辑和权限管理机制,这对于提升自动化系统的安全性与效率具有重要意义。对于初学者来说,这是一个很好的起点,而...
示例描述:本章介绍WPF中的依赖属性和事件路由特性。 AttachedEvents 使用WPF的附加事件。 CaptureMouseDemo 捕捉鼠标示例。 CreateWPFDependencyProperty 创建WF中的依赖属性。 CustomRoutedEvent ...