数据保护

更新时间:
复制 MD 格式

数据保护功能在不改动业务库数据的前提下,对通过 Agent 数据网关执行的 SQL 查询进行细粒度的可见性管控。本文介绍字段级保护与行级保护的核心概念,以及如何设置保护规则、授权和查看保护效果。

功能概述

数据保护功能用于在不改动业务库数据的前提下,对通过 Agent 数据网关执行的 SQL 查询进行细粒度的数据可见性管控。Agent 数据网关提供以下两类保护能力:

能力

保护对象

生效方式

无权限时的表现

字段级保护

表中的某个字段(列)。

查询时对该字段自动脱敏。

按配置的脱敏算法返回脱敏值(如 138****5678)。

行级保护

表中的部分数据行。

查询时自动注入行过滤条件。

未授权的行被自动过滤,查询结果中不可见。

整体使用流程分为以下三步:

  1. 设置保护规则(管理员):在数据保护页面为字段配置脱敏方式,或为表配置行管控规则。

  2. 授权(管理员):为需要访问明文或受保护行的用户或 Agent 授予权限。

  3. 自动生效(使用者):用户通过网关查询数据时,系统按其权限自动脱敏或过滤,无需额外操作。

支持的数据库引擎

数据保护功能支持以下数据库引擎:MySQL、PolarDB MySQL、AnalyticDB MySQL、Hologres、PostgreSQL、PolarDB PostgreSQL。

核心概念

字段级保护

字段级保护涉及以下概念:

  • 受保护字段:字段设置为受保护后,任何无权限用户查询该字段只能看到脱敏值。

  • 无权限时的脱敏算法:用户没有该字段读权限时,查询结果统一应用的脱敏算法。缺省为全遮掩。

  • 可申请权限的脱敏算法:管理员允许对该字段授权的脱敏算法范围。授权时只能从该范围内选择算法。缺省为明文。

Agent 数据网关内置以下脱敏算法:

名称

效果说明

示例

明文

不脱敏,返回原值。

13812345678 → 13812345678

全遮掩

全量遮掩,固定输出 ******。

13812345678 → ******;NULL → ******

半遮掩

保留前 3 位、后 4 位,中间遮掩。

13812345678 → 138****5678

行级保护

行管控规则有两种类型,同一张表只能选择其中一种。

按维度隔离(白名单,默认全部不可见)

按字段内容进行隔离,以某个字段(如“部门”“地区”)的取值为维度分配权限。用户只能看到自己被授权的取值所对应的数据行,其余一律不可见。

例:在“采购表”上按“部门”隔离后,被授予“销售部”行权限的用户只能看到“部门=销售部”的采购记录,看不到其他部门的记录。

按行保护(黑名单,默认全部可见)

按条件只对特定行设置保护,未获授权的用户查询时这些行会被自动过滤,其余数据正常可见。

例:在“采购表”上将“部门=财务部”的行设为保护后,销售部的用户看不到“财务部”的采购记录,其余部门(如市场部、法务部)的采购记录照常可见。

两种类型的对比如下:

对比项

按维度隔离

按行保护

管控模型

白名单。

黑名单。

未授权用户默认可见范围

全部不可见。

除受保护行外全部可见。

规则定义内容

维度字段清单(如 ["dept"])。

受保护行的条件谓词(如 dept = '财务部')。

授权语义

授予具体维度取值(如 dept ∈ {销售部}),支持 * 通配全部放开。

布尔放开:授权后即可看到受保护行。

典型场景

多租户、分部门、分区域的数据隔离。

少量高敏数据行保护。

字段级保护与行级保护的边界

字段级保护与行级保护是两套相互独立、可叠加的管控能力,解决的问题不同:

维度

字段级保护

行级保护

保护对象

字段的取值形态(同一行数据,值以明文还是脱敏形式返回)。

行的可见范围(哪些行出现在结果集中)。

生效方式

对受保护字段脱敏;受保护字段进入计算链路时直接拦截。

向查询自动注入行过滤条件。

授权模型

字段级授权:读(指定脱敏算法)或写。

行级授权:仅读。

对写操作(DML)的处理

无字段写授权时,对受保护字段的 INSERT、UPDATE 等写操作直接拦截。

不做行级拦截,仅做风险提醒。

未授权时的表现

行仍然可见,但受保护字段返回脱敏值。

未授权的行整行不可见(被过滤)。

前提条件

  • 保护规则的设置和授权需要管理员权限。关于用户角色的更多信息,请参见管理用户。

  • 需要保护的数据库实例已作为数据源录入 Agent 数据网关。

设置保护规则

字段级保护设置

字段级保护用于对表中的敏感字段配置脱敏方式。设置入口为数据保护中心 > 保护对象管理 > 字段级页签,支持以下两种视图:

  • 全局列表:展示当前账号下所有已标记的受保护字段,可按字段关键词搜索。

  • 按表查看:先定位到某张表,查看该表全部字段,并对其中字段进行标记或取消标记。

新增字段级保护规则的操作步骤如下:

  1. 登录AI原生数据库服务控制台。

  2. 在左侧导航栏,单击Agent 数据网关,进入 Agent Gateway 控制台。

  3. 在控制台左侧导航栏,选择数据保护中心 > 保护对象管理,单击字段级页签。

  4. 单击新增字段设置。

  5. 依次选择库、表、字段。

  6. 配置无权限时的脱敏算法(缺省为全遮掩)。

  7. 配置可申请权限的脱敏算法(可多选,缺省为明文),即后续授权时允许选择的算法范围。

  8. 单击保存。保存后规则立即生效,所有无权限用户对该字段的查询结果都会被脱敏。

编辑或移除字段级保护规则时:

  • 编辑:若收窄了可申请权限的脱敏算法范围,已授出的越界算法授权会被自动级联回收,范围内的授权保留。

  • 移除:移除字段保护时,该字段上已授出的全部字段级权限会被级联回收,随后字段恢复为普通字段(明文可见)。

行级保护设置

行级保护用于对表中的数据行配置可见性规则。设置入口为数据保护中心 > 保护对象管理 > 行级页签,同样支持全局列表与按表查看两种视图。列表展示每条规则的规则名称、实例、库、表、类型(按行保护或按维度隔离)、受控谓词或维度字段。

新增行级保护规则的操作步骤如下:

  1. 在保护对象管理页面,单击行级页签,然后单击新增行设置。

  2. 填写规则名称(不能重复)。

  3. 依次选择库、表。

  4. 选择规则类型:

    • 按维度隔离:指定一个维度字段(如 dept、region)。保存后该表默认对所有未授权用户全部不可见,需要通过行级授权按维度取值放开。

    • 按行保护:填写受控条件。保存后命中该条件的行对未授权用户不可见,其余行不受影响。

  5. 单击保存。

重要

同一张表只能选择一种行规则类型。即当表上已存在按行保护规则时,不能再创建按维度隔离规则,反之亦然。

授权

字段级授权

字段级保护设置完成后,默认所有用户查询都返回脱敏值。需要查看明文的用户或 Agent,需由管理员授权。

  1. 在控制台左侧导航栏,选择用户管理 > 权限管理。

  2. 单击新增授权。

  3. 授权范围选择字段。

  4. 依次选择库、表、字段(须为已标记的受保护字段)。

  5. 选择权限类型:

    • 读(查询):需同时指定授权后使用的脱敏算法,且必须在该字段配置的可申请权限的脱敏算法范围内。

    • 写(变更):放开对该字段的写入(INSERT、UPDATE 等 DML)。未获写授权的用户对受保护字段执行写操作会被直接拦截。

  6. 设置有效期(起止时间),到期后权限自动失效。

  7. 单击提交。

行级授权

行管控规则创建后,通过行级授权控制每个用户或 Agent 的可见行范围。

说明

行级授权仅支持读(查询)权限类型。行级保护只对查询生效,写操作不做行级拦截,仅做风险提醒。

  1. 在权限管理页面,单击新增授权。

  2. 授权范围选择行。

  3. 选择表:先选择数据库,再选择表。

  4. 选择行:从下拉列表中选择该表上已配置的行管控规则,展示为 规则名(库.表/类型)。

  5. 权限类型勾选读(查询)。

  6. 按规则类型完成差异化配置:

    • 按行保护:页面展示该规则的受控条件(如 WHERE tenant_id = 'tenant_a'),条件由行管控规则定义,授权时不可修改。授权后该用户即可看到命中受控条件的数据行。

    • 按维度隔离:为每个维度字段指定被授权的取值集合(如 dept ∈ {销售部, 市场部})。

  7. 设置有效期。

  8. 单击提交。

保护效果

脱敏效果

以 customer_info 表为例,phone 字段已设置保护(无权限时为全遮掩,可申请范围为明文、半遮掩)。用户执行以下查询:

SELECT name, phone FROM customer_info;

不同权限下的返回结果如下:

用户权限状态

phone 返回值

说明

无字段读授权

******

按字段基线无权限时的脱敏算法(全遮掩)兜底返回。

已授权 sys_keep_prefix_suffix(半遮掩)

138****5678

按授权中指定的算法(半遮掩)返回。

已授权 sys_none(明文)

13812345678

明文可见。

授权已过期或被回收

******

回落到基线脱敏算法。

重要

对当前用户仍处于脱敏态的受保护字段(包括无授权、仅授权了半遮掩等脱敏算法、授权已过期等情况),只允许出现在 SELECT 投影位置,在查询结果中以脱敏值返回;一旦进入计算链路,SQL 会被拒绝执行。

行过滤效果

按行保护效果

规则:采购表上受控条件为 dept = '财务部'。用户执行以下查询:

SELECT * FROM purchase_orders;

用户权限状态

实际执行效果

可见数据

无行级授权

注入 WHERE NOT (dept = '财务部')

除财务部外的全部记录。

已授权该规则

不注入过滤条件。

全部记录(含财务部)。

按维度隔离效果

规则:采购表上维度字段为 dept。不同权限下的执行效果如下:

用户权限状态

实际执行效果

可见数据

无行级授权

注入 WHERE (1 = 0)

空结果(全部不可见)。

已授权 dept ∈ {销售部}

注入 WHERE (dept IN ('销售部'))

仅销售部的记录。

已授权 dept ∈ {销售部, 市场部}

注入 WHERE (dept IN ('销售部', '市场部'))

销售部与市场部的记录。

已授权 dept = "*"(通配)

不注入过滤条件。

全部记录。