行级管控

本文为您介绍如何对表中行数据进行管控,以及申请行权限。

应用场景

DMS的行级管控可保护横向数据安全,所有的行通过一个或若干个确定的值(管控字段的取值)进行区分,实现对行数据的管控。

  • 如果您需要使员工仅可查看自己负责地域的数据,不能查看全部区域的数据,可以使用DMS的行级管控功能。

  • 如果您数据库下有多张表,且多张表都需要使用同样的管控值进行行级管控,则可通过一个管控组同时对多张表进行管控。

前提条件

  • 实例的管控模式为安全协同。更多信息,请参见管控模式

  • 实例已开启敏感数据保护。具体操作,请参见开通敏感数据保护

  • 系统角色为DBA、管理员或安全管理员。查看系统角色的操作,请参见查看我的系统角色

  • 数据库为关系型数据库。例如RDS MySQLRDS PostgreSQLPolarDB MySQL版等。

    说明

    当前仅支持物理库。

操作步骤

本示例以满足前提条件的poc_prod生产类型数据库举例。

步骤一:添加行级管控

  1. 登录数据管理DMS 5.0

  2. 单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 安全与规范(DBS) > 敏感数据管理 > 敏感数据资产

    说明

    若您使用的是非极简模式的控制台,在顶部菜单栏中,选择安全与规范(DBS) > 敏感数据管理 > 敏感数据资产

  3. 单击页面右上角的全域敏感数据列表,进入设置行级管控的页面。

    说明

    您也可以在实例列表区域的已开启页签下,单击目标实例右侧的敏感数据列表,进入设置行级管控的页面。

  4. 添加管控组。

    行级管控页签下,单击添加管控组,并输入管控组名称。

  5. 添加行配置。

    1. 单击添加行配置

    2. 搜索并选择目标数据库。

    3. 选择目标表和需要设置管控的字段。

      说明

      同一个管控组中不可重复定义行级管控表,且一张表仅支持定义一个字段。

    4. 单击添加

  6. 添加管控行值。

    1. 单击管控组名称右侧的详情

    2. 在详情页面,单击添加行值,配置如下信息。

      配置项

      说明

      是否追加

      取值及说明如下:

      • :本次导入将在现有的行值列表上继续新增。

      • :本次导入将会覆盖原来的行值列表。

      行值内容

      增加管控的行值。多行值内容,需要使用英文逗号(,)分隔。

    3. 单击导入

      出现导入行值成功的提示后,表示行值已追加成功。

步骤二:申请行权限

所有用户(包含管理员、DBA)在查询该行的数据前,都需要申请受管控的行权限。

  1. 登录数据管理DMS 5.0

  2. 单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 安全与规范(DBS) > 权限中心 > 权限工单

    说明

    若您使用的是非极简模式的控制台,在顶部菜单栏中,选择安全与规范(DBS) > 权限中心 > 权限工单

  3. 权限申请工单列表页面,单击右上角的权限申请 > 行权限

  4. 选中目标行,单击添加,将其移动至确认已选择的库/表/列框中。

  5. 选择权限区域,选择查询权限,再配置期限申请原因等信息。

  6. 配置完成后,单击提交申请。等待审批通过,在SQL窗口查询行级管控数据。

    说明

    提交申请后,请等待审批通过,您可以在工作台的首页,查看权限申请工单的审核进度。

其他操作

  • 删除行级管控组:在行级管控的页签下,删除管控组。删除管控组后,设置的行级管控能力将失效。

  • 编辑行级管控组:在行级管控的页签下,编辑管控组名称及设置的原管控字段等信息。

常见问题

Q:为什么在授予管控行的查询权限后,在SQL窗口执行查询SQL时还会失败?

A:请根据如下步骤进行排查:

  1. 请确保您具有目标数据库、表的查询权限。授权的具体操作,请参见申请行权限

  2. 在SQL窗口使用包含WHERE条件的SQL语句查询管控的数据行。

    例如,受管控的字段为buyer_name,受管控的行值为name1、name2和name3,在已有数据库、表dms_test的查询权限的前提下,通过SQL窗口执行如下SQL,查询受管控的数据行。

    • 查询单个管控值所在的数据行时,可在SQL语句的WHERE条件中使用=IN。示例SQL如下:

      SELECT * FROM dms_test WHERE buyer_name ='name1';
    • 查询多个管控值所在的数据行时,可在WHERE条件中使用IN。示例SQL如下:

      SELECT * FROM dms_test WHERE buyer_name IN ('name1', 'name2','name3');