配置行级访问控制
在业务开发过程中,存在多个开发者共同访问和维护同一张DWS表的场景,需要针对不同开发者设置不同行数据的访问权限。在这种场景下,您可以配置行级访问控制策略,为不同开发者按照行数据进行授权。
在数据安全组件新建行级访问控制策略后,通过策略同步,会将行级访问控制策略同步到DWS,并自动开启该DWS表的行访问控制开关使该策略生效。
值得注意的是,行级访问控制策略为DataArts Studio实例级别配置,各工作空间之间数据互通,全局可见并生效。
前提条件
- 新建DWS行级访问控制策略前,已在管理中心创建数据仓库服务(DWS)类型的数据连接,请参考创建DataArts Studio数据连接。DWS数据连接中的账户要具备待控制表的GRANT权限(数据库对象创建后,默认只有对象所有者或者系统管理员可以通过GRANT命令将对象的权限授予其他用户)。
- 行级访问控制为指定用户/用户组在数据源上关联策略,因此需要先将IAM上的用户信息同步到数据源上,详见同步IAM用户到数据源。
- 如果希望在DataArts Studio数据开发执行脚本、测试运行作业时,使用当前用户身份认证鉴权以实现行级访问控制策略生效,则需要启用细粒度认证。
- 为确保行级访问控制策略生效,须确保策略中指定的用户已具备待控制操作的表权限,同时需要将表所属模式的USAGE权限授予该用户。可通过如下命令为指定的user1,user2,user3授权。
GRANT USAGE ON SCHEMA schema_name TO user1,user2,user3; GRANT SELECT,UPDATE,DELETE ON TABLE table_name TO user1,user2,user3;
约束与限制
- 仅DAYU Administrator、Tenant Administrator用户或者数据安全管理员可以创建、修改或删除行级访问控制策略,其他普通用户无权限操作。
- 当前行级访问控制策略仅支持DWS数据源,且不支持DWS逻辑集群。DWS数据连接中的账户要具备待控制表的GRANT权限(数据库对象创建后,默认只有对象所有者或者系统管理员可以通过GRANT命令将对象的权限授予其他用户)。
- 行级访问控制为指定用户/用户组在数据源上关联策略,因此需要先将IAM上的用户信息同步到数据源上,详见同步IAM用户到数据源。
- 当前行级访问控制支持影响数据表的读取操作(SELECT、UPDATE、DELETE、ALL,ALL表示会影响SELECT、UPDATE、DELETE三种操作),暂不支持影响数据表的写入操作(INSERT、MERGE INTO)。
- 行级访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。
- 支持对行存表、行存分区表、列存表、列存分区表、复制表、unlogged表、hash表定义行级访问控制策略,不支持HDFS表、外表、临时表定义行级访问控制策略。
- 不支持对视图定义行级访问控制策略。
- 同一张表上可以创建多个行级访问控制策略,一张表最多创建100个行访级问控制策略。
- 具有DWS管理员权限的用户和初始运维用户(Ruby)不受行访问控制影响,可以查看表的全量数据。
- 通过SQL语句、视图、函数、存储过程查询包含行级访问控制策略的表,都会受影响。
- 同步行访级问控制策略后,不支持对行访问控制策略依赖的列进行类型修改。
创建行级访问控制策略
- 在DataArts Studio控制台首页,选择对应工作空间的“数据安全”模块,进入数据安全页面。
- 单击左侧导航树中的
,进入行级访问控制页面。图1 进入行级访问控制页面
- 单击“新建”,进入新建行级访问控制策略页面,参数配置参考表1。
图2 新建行级访问控制策略参数配置
创建行级访问控制策略参数配置说明:表1 配置策略参数 参数名
参数说明
*策略名称
行级访问控制策略的标识,同一个数据表上不能有同名的行访问控制策略。
为便于策略管理,建议名称中标明要控制的对象和内容规则。
*数据源类型
当前仅支持DWS数据源。
*数据连接
从下拉列表中选择数据连接类型中已创建的数据连接,若未创建请参考创建DataArts Studio数据连接新建连接。
*集群名称
无需选择,自动匹配数据连接中的数据源集群。
*数据库
选择行数据所在的数据库。
*数据表
选择行数据所在的数据表。选择后系统自动展示所选的表结构。
*SQL操作
选择需要控制的操作(SELECT、UPDATE、DELETE、ALL,ALL表示会影响SELECT、UPDATE、DELETE三种操作),暂不支持控制写入操作(INSERT、MERGE INTO)。
- 当选择SELECT时,SELECT类操作受行访问控制的影响,所选用户组/用户只能查看到满足表达式条件的行数据,受影响的操作包括SELECT,UPDATE ... RETURNING,DELETE ... RETURNING。
- 当选择UPDATE时,UPDATE类操作受行访问控制的影响,所选用户组/用户只能更新满足表达式条件的行数据,受影响的操作包括UPDATE,UPDATE ... RETURNING,SELECT ... FOR UPDATE/SHARE。
- 当选择DELETE时,DELETE类操作受行访问控制的影响,所选用户组/用户只能删除满足表达式条件的行数据,受影响的操作包括DELETE,DELETE ... RETURNING。
*用户组/用户
指定当前工作空间成员中的用户或用户组。
指定的用户或用户组按照所选的“SQL操作”进行操作时,只能操作满足“表达式”条件的行级数据。
- 当选择SELECT时,SELECT类操作受行访问控制的影响,所选用户组/用户只能查看到满足表达式条件的行数据,受影响的操作包括SELECT,UPDATE ... RETURNING,DELETE ... RETURNING。
- 当选择UPDATE时,UPDATE类操作受行访问控制的影响,所选用户组/用户只能更新满足表达式条件的行数据,受影响的操作包括UPDATE,UPDATE ... RETURNING,SELECT ... FOR UPDATE/SHARE。
- 当选择DELETE时,DELETE类操作受行访问控制的影响,所选用户组/用户只能删除满足表达式条件的行数据,受影响的操作包括DELETE,DELETE ... RETURNING。
*表达式
填写行数据的表达式。只有满足表达式的行数据,才允许被指定用户按照所选的“SQL操作”进行操作。格式如下:`目标字段`="操作值"
建议表达式目标字段以反引号包裹,操作值以双引号包裹,需要匹配多个行数据时,可以用AND拼接,例如:
`role`="test" AND `department`="sales"
- 单击“提交”,完成行级访问控制策略创建。行级访问控制策略创建完成后,需要手动单击“同步”,将该策略同步到数据源中。
相关操作
- 同步策略:在行级访问控制页面,单击对应任务操作栏中的“同步”,即可将该策略同步到数据源中。当需要批量同步时,可以在勾选策略后,在列表上方单击“同步”。
只有处于“同步成功”状态的策略才能生效。如果策略同步失败,可通过查看策略详情查看策略运行日志,通过日志排查同步失败原因。待问题修复后请重新同步,如果仍同步失败,请联系技术支持人员协助处理。
- 编辑策略:在行级访问控制页面,单击对应任务操作栏中的“编辑”,即可编辑行级访问控制策略。
- 删除策略:在行级访问控制页面,单击对应任务操作栏中的“删除”,即可删除策略。当需要批量删除时,可以在勾选策略后,在列表上方单击“删除”。
删除操作无法撤销,请谨慎操作。
- 查看策略详情:在行级访问控制页面,找到需要查看的策略,单击策略名即可查看策略详情。
图3 查看策略详情