更新时间:2024-04-03 GMT+08:00

配置行级访问控制

在业务开发过程中,存在多个开发者共同访问和维护同一张DWS表的场景,需要针对不同开发者设置不同行数据的访问权限。在这种场景下,您可以配置行级访问控制策略,为不同开发者按照行数据进行授权。

在数据安全组件新建行级访问控制策略后,通过策略同步,会将行级访问控制策略同步到DWS,并自动开启该DWS表的行访问控制开关使该策略生效。

值得注意的是,行级访问控制策略为DataArts Studio实例级别配置,各工作空间之间数据互通,全局可见并生效。

前提条件

  • 新建DWS行级访问控制策略前,已在管理中心创建数据仓库服务(DWS)类型的数据连接,请参考新建数据连接。DWS数据连接中的账户要具备待控制表的GRANT权限(数据库对象创建后,默认只有对象所有者或者系统管理员可以通过GRANT命令将对象的权限授予其他用户)。
  • 行级访问控制为指定用户/用户组在数据源上关联策略,因此需要先将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上的用户信息同步到数据源上,详见同步用户
  • 当前行级访问控制支持影响数据表的读取操作(SELECT、UPDATE、DELETE、ALL,ALL表示会影响SELECT、UPDATE、DELETE三种操作),暂不支持影响数据表的写入操作(INSERT、MERGE INTO)。
  • 行级访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。
  • 支持对行存表、行存分区表、列存表、列存分区表、复制表、unlogged表、hash表定义行级访问控制策略,不支持HDFS表、外表、临时表定义行级访问控制策略。
  • 不支持对视图定义行级访问控制策略。
  • 同一张表上可以创建多个行级访问控制策略,一张表最多创建100个行访级问控制策略。
  • 具有DWS管理员权限的用户和初始运维用户(Ruby)不受行访问控制影响,可以查看表的全量数据。
  • 通过SQL语句、视图、函数、存储过程查询包含行级访问控制策略的表,都会受影响。
  • 同步行访级问控制策略后,不支持对行访问控制策略依赖的列进行类型修改。

创建行级访问控制策略

  1. DataArts Studio控制台首页,选择实例,单击“进入控制台”,选择对应工作空间的“数据安全”模块,进入数据安全页面。

    图1 选择数据安全

  2. 单击左侧导航树中的行级访问控制,进入行级访问控制页面。

    图2 进入行级访问控制页面

  3. 单击“新建”,进入新建行级访问控制策略页面,参数配置参考表1

    图3 新建行级访问控制策略参数配置

    创建行级访问控制策略参数配置说明:
    表1 配置策略参数

    参数名

    参数说明

    *策略名称

    行级访问控制策略的标识,同一个数据表上不能有同名的行访问控制策略。

    为便于策略管理,建议名称中标明要控制的对象和内容规则。

    *数据源类型

    当前仅支持DWS数据源。

    *数据连接

    从下拉列表中选择数据连接类型中已创建的数据连接,若未创建请参考新建数据连接新建连接。

    *集群名称

    无需选择,自动匹配数据连接中的数据源集群。

    *数据库

    选择行数据所在的数据库。

    *数据表

    选择行数据所在的数据表。选择后系统自动展示所选的表结构。

    *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"

  4. 单击“提交”,完成行级访问控制策略创建。行级访问控制策略创建完成后,需要手动单击“同步”,将该策略同步到数据源中。

相关操作

  • 同步策略:在行级访问控制页面,单击对应任务操作栏中的“同步”,即可将该策略同步到数据源中。当需要批量同步时,可以在勾选策略后,在列表上方单击“同步”。

    只有处于“同步成功”状态的策略才能生效。如果策略同步失败,可通过查看策略详情查看策略运行日志,通过日志排查同步失败原因。待问题修复后请重新同步,如果仍同步失败,请联系技术支持人员协助处理。

  • 编辑策略:在行级访问控制页面,单击对应任务操作栏中的“编辑”,即可编辑行级访问控制策略。
  • 删除策略:在行级访问控制页面,单击对应任务操作栏中的“删除”,即可删除策略。当需要批量删除时,可以在勾选策略后,在列表上方单击“删除”。

    删除操作无法撤销,请谨慎操作。

  • 查看策略详情:在行级访问控制页面,找到需要查看的策略,单击策略名即可查看策略详情。
    图4 查看策略详情