LAS 权限由两部分组成: 通用权限 和 数据权限 。通用权限由用户在火山引擎上配置,IAM 权限系统负责管理此部分权限。数据权限由 LAS 内部独立实现,需要通过 LAS SDK/ACL,或者在 DataLeap-Triton 平台进行管理,数据权限资源为不同 Scope 的资源,例如 Schema/Table/Function/Resource/Column/Row,授权主体为 IAM 子账号/主账号。
此处主要描述数据权限的继承关系,其中 Column 权限独立于继承体系,即拥有 Table 的 Select 权限,不一定具有 Column 的权限。
用户需要在火山引擎控制台中给指定子账号授予策略。LAS 提供两个系统预置策略,用户也可以基于不同权限点创建自定义策略。
预置策略 | 说明 | Policy |
LASFullAccess | 湖仓一体化分析服务(LAS)全读写权限 | <br>{<br> "Statement": [<br> {<br> "Effect": "Allow",<br> "Action": [<br> "las:*"<br> ],<br> "Resource": [<br> "*"<br> ]<br> }<br> ]<br>}<br> |
LASReadOnlyAccess | 湖仓一体化分析服务(LAS)只读权限 | <br>{<br> "Statement": [<br> {<br> "Effect": "Allow",<br> "Action": [<br> "las:GetQueue",<br> "las:ListQueue",<br> "las:ListUserJob",<br> "las:MonitorQueue",<br> "las:MonitorStorage",<br> "las:ConsolePermission",<br> "las:ListRegion",<br> "las:ListSchema"<br> ],<br> "Resource": [<br> "*"<br> ]<br> }<br> ]<br>}<br> |
{ "Statement": [ { "Effect": "Allow", "Action": [ "las:CreateSchema", "las:ListSchema" ], "Resource": [ "*" ] } ] }
Scope | 权限点 | 说明 | LASFullAccess | LASReadOnlyAccess |
---|---|---|---|---|
Global | All | 提供所有资源的完全控制权限 | ✔️ | |
CreateQueue | 允许被授权的 IAM 子账户在服务中新建队列。 | ✔️ | ||
GetQueue | 在控制台队列管理页,允许被授权的 IAM 子账户在服务中获取队列的状态和配置、监控数据。 | ✔️ | ✔️ | |
ListQueue | 在控制台队列管理页,允许被授权的 IAM 子账户查询队列列表。 | ✔️ | ✔️ | |
MonitorQueue | 允许被授权的 IAM 子账户获取队列数据扫描量信息。 | ✔️ | ✔️ | |
MonitorStorage | 允许被授权的 IAM 子账户获取队列存储使用情况信息。 | ✔️ | ✔️ | |
ListRegion | 允许被授权的 IAM 子账户获取 LAS 服务地域配置信息。 | ✔️ | ✔️ | |
ListUserJob | 在控制台作业管理页,允许被授权的 IAM 子账户查看其自身提交的任务信息。 | ✔️ | ✔️ | |
ListJob | 在控制台作业管理页,允许被授权的 IAM 子账户查看该主账号下所有任务信息。 | ✔️ | ||
ListJobSubmitter | 在控制台作业管理页,允许被授权的 IAM 子账户查看该主账号下所有任务提交人信息。 | ✔️ | ||
KillJob | 在控制台作业管理页,允许被授权的 IAM 子账户 Kill 该主账号下正在运行的任务信息。 | ✔️ | ||
ConsolePermission | 允许被授权的 IAM 子账户可以访问 LAS 控制台。 | ✔️ | ✔️ | |
CreateSchema | 允许被授权的 IAM 子账户创建 Schema。 | ✔️ | ||
ListSchema | 允许被授权的 IAM 子账户查看 Schema 信息。 | ✔️ | ✔️ |
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>0.0.1-public-las</version> </dependency>
HiveMetaStoreClient hiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf()); hiveMetaStoreClient.setRegion(region); hiveMetaStoreClient.setAccessKeyIdAndSecretAccessKey(accessKeyId, secretAccessKey);
API | 功能描述 | 请求参数 | 参数限制 |
grantPrivilegesToPrincipal | 批量给用户授权,支持跨 Region、跨租户授权 | 1: GeminiPrincipal principal, | / |
2: list | 300 | ||
revokePrivilegesFromPrincipal | 批量回收用户权限,支持跨 Region、跨租户授权 | 1: GeminiPrincipal principal, | / |
2: list | 300 | ||
addSecurityLabels | 增加多个敏感列 | 1: list | 30 |
deleteSecurityLabels | 删除多个敏感列 | 1: list | 30 |
listSecurityLabels | 查询指定 table 的所有敏感列 | 1: GeminiTable table | / |
listPrivilegesOnResources | 根据指定 resource list 获取所有被授予的权限,可以指定筛选条件。(支持分页) | 1: list | 10 |
2: list | 10 | ||
3: list | 10 | ||
4: i32 pageIndex, | >= 1 | ||
5: i32 pageSize | 1000 | ||
listPrivilegesForPrincipal | 获取指定 principal 的所有权限信息(支持分页) | 1: GeminiPrincipal principal, | / |
2: list | 10 | ||
3: list | 10 | ||
4: list | 10 | ||
4: i32 pageIndex, | >= 1 | ||
5: i32 pageSize | 1000 | ||
checkPrivileges | 鉴权接口,Check 一个 principal 是否具有指定 privileges 的权限(如果没有权限,则会抛出异常) | 1: GeminiPrincipal principal | / |
2: list | / |
跳转到 DataLeap-Triton 进行权限管理。
Scope | 权限点 | 说明 |
Schema | CreateTable | 创建表、视图的权限 |
CreateFunction | 创建函数的权限 | |
CreateResource | 创建资源的权限 | |
CreateInstance | 创建实例的权限 | |
Describe | 读取 Schema 元信息 | |
Show | 列出 Schema 内所有对象,包括表、资源、函数、实例等信息 | |
Drop | 删除 Schema | |
Alter | 修改 Schema 元信息 | |
All | 具备上述所有权限,包含对其授权的权限 | |
Table | Describe | 读取表元信息 |
Select | 读取表数据 | |
Alter | 修改表的元信息或添加删除分区 | |
Insert | 写入/覆盖表数据 | |
Drop | 删除表 | |
Import | 导入数据 | |
Export | 导出数据 | |
All | 具备上述所有权限,包含对其授权的权限 | |
Column | Select | 读取列数据 |
Row | Select | 读取行数据 |
Function | Read | 读取函数信息 |
Write | 更新函数 | |
Delete | 删除函数 | |
Execute | 执行函数权限 | |
All | 具备上述所有权限,包含对其授权的权限 | |
Resource | Read | 读取 |
Write | 更新 | |
Delete | 删除 | |
All | 具备上述所有权限,包含对其授权的权限 |
数据对象的创建者,将自动拥有该对象的完全控制权限。
说明 :行权限通过类似 Policy 的方式实现。
map<string, set<string>>
,可以表示 col_a in ('a1', 'a2') and col_b in ('b1')
例如 :
col_a in ('a1', 'a2') and col_b in ('b1')
col_a in ('a3')
select * from xxx where col_a = 'a3'
select * from xxx where col_a in ('a1', 'a2') and col_b in ('b1','b2')
select * from xxx where col_a = 'a3' and col_b = 'b1'
select * from xxx where col_a = 'a1'
select * from xxx where col_b = 'b1'
说明 :列权限与库表权限独立,具有 Schema 和 Table 的权限,不一定具有敏感 Column 权限。