
# 配置行级访问控制
在业务开发过程中，存在多个开发者共同访问和维护同一张DWS表的场景，需要针对不同开发者设置不同行数据的访问权限。在这种场景下，您可以配置行级访问控制策略，为不同开发者按照行数据进行授权。
在数据安全组件新建行级访问控制策略后，通过策略同步，会将行级访问控制策略同步到DWS，并自动开启该DWS表的行访问控制开关使该策略生效。
值得注意的是，行级访问控制策略为DataArts Studio实例级别配置，各工作空间之间数据互通，全局可见并生效。
#### 前提条件
- 新建DWS行级访问控制策略前，已在管理中心创建数据仓库服务（DWS）类型的数据连接，请参考[创建DataArts Studio数据连接](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1299.html)。DWS数据连接中的账户要具备待控制表的GRANT权限（数据库对象创建后，默认只有对象所有者或者系统管理员可以通过GRANT命令将对象的权限授予其他用户）。
- 行级访问控制为指定用户/用户组在数据源上关联策略，因此需要先将IAM上的用户信息同步到数据源上，详见[同步IAM用户到数据源](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1154.html)。
- 如果希望在DataArts Studio数据开发执行脚本、测试运行作业时，使用当前用户身份认证鉴权以实现行级访问控制策略生效，则需要[启用细粒度认证](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1160.html)。
- 为确保行级访问控制策略生效，须确保策略中指定的用户已具备待控制操作的表权限，同时需要将表所属模式的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用户到数据源](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1154.html)。
- 当前行级访问控制支持影响数据表的读取操作（SELECT、UPDATE、DELETE、ALL，ALL表示会影响SELECT、UPDATE、DELETE三种操作），暂不支持影响数据表的写入操作（INSERT、MERGE INTO）。
- 行级访问控制策略名称是针对表的，同一个数据表上不能有同名的行访问控制策略；对不同的数据表，可以有同名的行访问控制策略。
- 支持对行存表、行存分区表、列存表、列存分区表、复制表、unlogged表、hash表定义行级访问控制策略，不支持HDFS表、外表、临时表定义行级访问控制策略。
- 不支持对视图定义行级访问控制策略。
- 同一张表上可以创建多个行级访问控制策略，一张表最多创建100个行级访问控制策略。
- 具有DWS管理员权限的用户和初始运维用户(Ruby)不受行访问控制影响，可以查看表的全量数据。
- 通过SQL语句、视图、函数、存储过程查询包含行级访问控制策略的表，都会受影响。
- 同步行级访问控制策略后，不支持对行访问控制策略依赖的列进行类型修改。
 
#### 创建行级访问控制策略
1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
   
   详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
   
   
2. 在DataArts Studio控制台首页，选择对应工作空间的"数据安全"模块，进入数据安全页面。
3. 单击左侧导航树中的"访问权限管理 \> 行级访问控制"，进入行级访问控制页面。 
   图1进入行级访问控制页面   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002545361709.png "点击放大")
   
   
   
4. 单击"新建"，进入新建行级访问控制策略页面，参数配置参考[表1]。
   
   图2新建行级访问控制策略参数配置   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002174383992.png "点击放大")
   
   创建行级访问控制策略参数配置说明：
    表1配置策略参数 
   | 参数名      | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   |:---|:---|
   | \*策略名称   | 行级访问控制策略的标识，同一个数据表上不能有同名的行访问控制策略。 为便于策略管理，建议名称中标明要控制的对象和内容规则。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | \*数据源类型  | 当前仅支持DWS数据源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | \*工作空间   | 从下拉列表中选择数据连接所在工作空间，支持跨空间选择数据连接。注意，行级访问控制策略与工作空间之间无关联关系，工作空间仅用于关联数据连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | \*数据连接   | 从下拉列表中选择所选工作空间中已创建的DWS数据连接，若未创建请参考[创建DataArts Studio数据连接](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1299.html)新建连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | \*集群名称   | 无需选择，自动匹配数据连接中的数据源集群。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | \*数据库    | 选择行数据所在的数据库。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | \*数据表    | 选择行数据所在的数据表。选择后系统自动展示所选的表结构。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | \*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" ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      
   
   
5. 单击"提交"，完成行级访问控制策略创建。行级访问控制策略创建完成后，需要手动单击"同步"，将该策略同步到数据源中。
 
#### 相关操作
- 同步策略：在行级访问控制页面，单击对应任务操作栏中的"同步"，即可将该策略同步到数据源中。当需要批量同步时，可以在勾选策略后，在列表上方单击"同步"。 只有处于"同步成功"状态的策略才能生效。如果策略同步失败，可通过[查看策略详情]查看策略运行日志，通过日志排查同步失败原因。待问题修复后请重新同步，如果仍同步失败，请联系技术支持人员协助处理。
  
- 编辑策略：在行级访问控制页面，单击对应任务操作栏中的"编辑"，即可编辑行级访问控制策略。
- 删除策略：在行级访问控制页面，单击对应任务操作栏中的"删除"，即可删除策略。当需要批量删除时，可以在勾选策略后，在列表上方单击"删除"。
  ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  删除操作无法撤销，请谨慎操作。
  
- 查看策略详情：在行级访问控制页面，找到需要查看的策略，单击策略名即可查看策略详情。
  图3查看策略详情   
  ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002516804966.png "点击放大")
  
  
 
