配置访问控制
本文介绍如何在云器Lakehouse中为账户和元数据对象配置访问控制策略。通过合理配置访问控制,你可以确保数据与对象的访问仅限授权用户与角色,符合最小权限原则,提升系统安全性。
服务实例级管理
为服务实例(instance)指定额外的管理员用户
在云器Lakehouse中,创建服务实例的用户默认拥有“实例管理员”(instance_admin)角色。为确保至少有一名用户可执行实例层面的管理任务(如创建工作空间、管理实例级角色),当你移除被授予“实例管理员”(instance_admin)角色的用户时至少需要保留一名用户,否则会收到报错提示。建议至少再指定一名用户为实例管理员,以避免由于用户不可用或其他特殊情况的影响。
授予实例级别角色
服务实例级别的角色仅支持通过Web端方式授予。仅具备“服务实例管理员”(instance_admin)角色的用户可进行此操作。
在服务实例中依次打开“管理”-“安全”菜单,点击进入,并切换到“角色”页面。
点击需要授予的服务实例角色,进入该角色的详情页面,点击“用户授予”:
在弹窗中勾选需要授予的用户,点击“授权”按钮,即可完成实例角色的授予。
工作空间级管理
指定工作空间(workspace)管理员
创建工作空间(workspace)的用户默认拥有该工作空间的“工作空间管理员(workspace_admin)角色,该角色具备管理工作空间内的所有权限。每个工作空间内至少需要有一名用户被授予工作空间管理员角色,可以有多个用户被同时授予。
管理工作空间内角色和成员
每个工作工作空间内的角色和成员是与其他工作空间独立的,需要单独授予。仅一个工作空间的工作空间管理员(workspace_admin)角色,可以管理该工作空间内的角色授予、创建、删除,以及空间内成员的添加、移除。
管理空间成员
一个用户需要在指定工作空间内使用计算集群(Vcluster)和执行SQL的前提条件是加入该工作空间。工作空间管理员可以通过以下两种方式将指定用户加入工作空间中:
Web端操作
进入服务实例后,依次点击菜单中的“管理”-“工作空间”,进入工作空间列表。点击工作空间名称,进入需要添加成员的工作空间详情。
在工作空间详情页点击“+ 添加用户” 按钮,在弹窗中选择需要添加的用户。只有服务实例中已存在且当前没有加入此工作空间的用户才会在列表中列出。勾选一到多名用户,随后点击“添加用户”或“添加用户并授予角色”按钮,将已选择用户添加进入工作空间。成功添加后,可在工作空间的“用户”列表中找到新添加的用户。
在工作空间的“用户”列表中,点击某一用户右侧操作列的“...”,选择“移除用户”,将从工作空间中移除该用户。被移除的用户立即失去被授予的空间角色,并失去使用工作空间内计算集群(Vcluster)和在该工作空间内执行SQL的权限。
请注意,从工作空间移除的用户,仍将具备被直接授予给用户的数据权限,即可以在其他工作空间行使被授予的数据权限,对数据进行查询或变更。因此,推荐使用授予角色的方式管理权限,降低此类场景带来的权限管理难度。
SQL操作
通过JDBC连接工作空间,为工作空间添加用户时执行以下语句:
<user_name>替换为需要加入工作空间的用户名。仅支持添加服务实例中已存在且当前没有加入此工作空间的用户。
从工作空间移除用户执行以下语句:
<user_name>替换为需要移除工作空间的用户名。该操作不会删除此用户身份,只会从当前工作空间中移除此用户。
使用工作空间级别角色
在工作空间内进行开发
在工作空间中进行开发需要:具备在工作空间中执行SQL的权限(成为工作空间成员后获得);具备使用工作空间中计算资源的权限;具备需要操作的数据对象的权限。
在每个工作空间中预置了以下角色默认具备以上的一种或多种权限,可将以下角色授予用户,以快速开始数据开发。
工作空间开发者(workspace_dev)角色
workspace_dev角色默认具备工作空间内所有数据对象(table、view、dynamic table等,详见‘元数据对象’)的读写权限,默认具备工作空间内所有计算集群的使用权限。
用户被授予workspace_dev角色后,可直接在Web页面的“开发”功能内或使用JDBC协议进行数据开发。
注意,workspace_dev角色默认具备的数据对象读写权限并不支持其将权限二次授权。如需授予其他角色数据对象的读或写权限,请使用具备工作空间管理员(workspace_admin)角色的用户进行操作。
数据分析师(workspace_analyst)角色
workspace_analyst角色默认具备工作空间内所有计算集群的使用权限,默认具备工作空间内所有数据对象(table、view、dynamic table等)的read metadata(元数据查看)权限,但是不具备数据对象的select权限,即不能对任何的表或视图执行select查询。使用workspace_analyst角色进行数据查询分析时,需要授予workspace_analyst角色要查询数据对象的select权限,以执行数据查询操作。
对workspace_analyst角色的数据授权操作,请参考“GRANT”语句操作文档。
使用自定义角色或用户
自定义角色和用户通过授权,也可在工作空间中执行SQL语句进行开发或数据查询分析,但无法使用Web端的“开发”功能。对自定义角色和用户的授权需要具备workspace_admin角色的用户进行操作。授权可参考以下语句:
对用户授权时,将上述语句中的 TO ROLE <CUSTOME_ROLE_NAME> 替换为 TO USER <USER_NAME>即可。
提交并运维工作空间调度任务
在工作空间中提交调度任务只能在Web端的“开发”功能中完成。workspace_admin(工作空间管理员)和workspace_dev(工作空间开发者)角色具备“提交”作业脚本成为调度任务的权限。
工作空间中运维调度任务的系统角色为:workspace_sre(工作空间运维)。具备该角色的用户,可在“运维监控”菜单下的“任务运维”和”监控报警“功能以及”数据“菜单下的”数据质量“功能中,对其所在空间的调度任务进行管理操作。
workspace_sre(工作空间运维)角色具备该角色所在工作空间下所有调度任务的运维管理权限,不具备工作空间下的计算资源使用和数据对象查询权限。
如需对服务实例内所有工作空间的调度任务进行统一管理,可对用户授予实例级别角色:instance_sre(实例运维)角色。该角色的权限是服务实例内所有workspace_sre角色默认权限的并集。
创建自定义角色
为实践“最小权限原则”,建议根据你的组织业务职能划分创建自定义角色,并为其分配针对特定对象和操作的权限。这样,你可以精确控制用户对特定数据或对象的访问范围。
创建自定义角色的一般流程:
- 创建自定义角色(CREATE ROLE语句)。
- 为该角色授予所需的权限点(GRANT语句)。
- 将该角色授予给需要相关权限的用户(GRANT ROLE语句或Web端操作)。
注意:云器Lakehouse中,角色不能被授予给其他角色,即不支持角色层次结构(Role Hierarchy)。所有角色最终直接授予给用户,避免了由于角色间的层级继承关系而带来判断具体用户权限范围的复杂度。
授予或移除用户的角色
你可以使用Web或执行授权SQL的操作方式向用户授予或移除角色。仅具备服务实例管理员(instance_admin)或工作空间管理员(workspace_admin)角色的用户,可以为用户授予或移除角色。服务实例管理员(instance_admin)具备向服务实例内所有用户授予实例级别角色的权限;工作空间管理员(workspace_admin)具备向工作空间内成员授予空间内角色的权限。
Web端操作
在“安全”-“角色”页面,可以查看当前实例下的服务实例级别角色和工作空间级别角色。
服务实例管理员(instance_admin)角色可查看所有的实例级别角色和所有工作空间级别角色,可管理所有实例级别角色的授权;
工作空间管理员(workspace_admin)角色可查看本工作空间内的所有工作空间角色,并管理这些角色的授权。如一个用户同时具备多个工作空间的工作空间管理员(workspace_admin)角色,则可以同时管理多个工作空间内的角色授权。
对任一角色授权时,点击该角色名称,进入角色详情页,此时可以查看该角色已被授予的所有用户。点击“+用户授予”,在弹窗中勾选需要添加的用户,点击“授权”,即可将角色授予用户。 !
移除角色被授予的用户时,点击用户名右侧的"...",选择“移除用户”,即可取消该用户使用这个角色的权限。
在“管理”-“工作空间”列表进入工作空间详情页面,在“角色”页签也可以查看该空间内的角色列表,并通过上述操作将该角色授予或取消授予用户。
SQL端操作
仅工作空间级别的用户支持使用SQL操作进行授权。在工作空间内执行以下语句,可将空间内角色授予指定用户。
执行以下语句可移除角色中的指定用户;
示例:创建自定义角色并授予权限
*提示:当前暂不支持在web端创建自定义角色和对自定义角色授权。你需要使用SQL创建自定义角色。
假设你希望创建一个空间级角色r1,用于管理特定schema s1下的一张表t1。为此,需要为r1授予:
- 对计算集群(假设名称为v1)的使用权限(USAGE)。
- [可选]计算集群(假设名称为v1)的read metadata权限,以在计算集群页面或show vclusters结果中可见这个计算集群;
- 对表s1.t1的ALL权限,以对表执行select、insert、update、alter等操作。
创建自定义角色
为角色授予权限
将角色授予给用户
示例:创建只读角色
若你需要一个角色仅能对某schema中所有表进行查询(只读访问),可按照与创建自定义角色相同的流程操作。区别在于这个场景下仅授予表的SELECT和READ METADATA权限,而不包含任何写入、修改、删除等权限。同时,这里使用all tables in schema s1来表达s1下当前和未来的所有table对象,以简化授权表达。
例如,为read_only角色授予schema s1下所有表的SELECT和READ METADATA权限:
请注意,如果read_only角色没有计算集群的使用权限,此时无法使用计算资源对table执行查询。所以还需要至少授予该角色1个计算集群(vcluster)的使用权限。
例如,为read_only角色授予名称为demo_vcluster的计算集群的使用权限。
查看已授予的权限
使用SHOW GRANTS命令可查看某对象或角色的当前权限状况。例如: