数据保护
数据保护功能在不改动业务库数据的前提下,对通过 Agent 数据网关执行的 SQL 查询进行细粒度的可见性管控。本文介绍字段级保护与行级保护的核心概念,以及如何设置保护规则、授权和查看保护效果。
功能概述
数据保护功能用于在不改动业务库数据的前提下,对通过 Agent 数据网关执行的 SQL 查询进行细粒度的数据可见性管控。Agent 数据网关提供以下两类保护能力:
能力 | 保护对象 | 生效方式 | 无权限时的表现 |
字段级保护 | 表中的某个字段(列)。 | 查询时对该字段自动脱敏。 | 按配置的脱敏算法返回脱敏值(如 |
行级保护 | 表中的部分数据行。 | 查询时自动注入行过滤条件。 | 未授权的行被自动过滤,查询结果中不可见。 |
整体使用流程分为以下三步:
设置保护规则(管理员):在数据保护页面为字段配置脱敏方式,或为表配置行管控规则。
授权(管理员):为需要访问明文或受保护行的用户或 Agent 授予权限。
自动生效(使用者):用户通过网关查询数据时,系统按其权限自动脱敏或过滤,无需额外操作。
支持的数据库引擎
数据保护功能支持以下数据库引擎:MySQL、PolarDB MySQL、AnalyticDB MySQL、Hologres、PostgreSQL、PolarDB PostgreSQL。
核心概念
字段级保护
字段级保护涉及以下概念:
受保护字段:字段设置为受保护后,任何无权限用户查询该字段只能看到脱敏值。
无权限时的脱敏算法:用户没有该字段读权限时,查询结果统一应用的脱敏算法。缺省为全遮掩。
可申请权限的脱敏算法:管理员允许对该字段授权的脱敏算法范围。授权时只能从该范围内选择算法。缺省为明文。
Agent 数据网关内置以下脱敏算法:
名称 | 效果说明 | 示例 |
明文 | 不脱敏,返回原值。 |
|
全遮掩 | 全量遮掩,固定输出 |
|
半遮掩 | 保留前 3 位、后 4 位,中间遮掩。 |
|
行级保护
行管控规则有两种类型,同一张表只能选择其中一种。
按维度隔离(白名单,默认全部不可见)
按字段内容进行隔离,以某个字段(如“部门”“地区”)的取值为维度分配权限。用户只能看到自己被授权的取值所对应的数据行,其余一律不可见。
例:在“采购表”上按“部门”隔离后,被授予“销售部”行权限的用户只能看到“部门=销售部”的采购记录,看不到其他部门的记录。
按行保护(黑名单,默认全部可见)
按条件只对特定行设置保护,未获授权的用户查询时这些行会被自动过滤,其余数据正常可见。
例:在“采购表”上将“部门=财务部”的行设为保护后,销售部的用户看不到“财务部”的采购记录,其余部门(如市场部、法务部)的采购记录照常可见。
两种类型的对比如下:
对比项 | 按维度隔离 | 按行保护 |
管控模型 | 白名单。 | 黑名单。 |
未授权用户默认可见范围 | 全部不可见。 | 除受保护行外全部可见。 |
规则定义内容 | 维度字段清单(如 | 受保护行的条件谓词(如 |
授权语义 | 授予具体维度取值(如 | 布尔放开:授权后即可看到受保护行。 |
典型场景 | 多租户、分部门、分区域的数据隔离。 | 少量高敏数据行保护。 |
字段级保护与行级保护的边界
字段级保护与行级保护是两套相互独立、可叠加的管控能力,解决的问题不同:
维度 | 字段级保护 | 行级保护 |
保护对象 | 字段的取值形态(同一行数据,值以明文还是脱敏形式返回)。 | 行的可见范围(哪些行出现在结果集中)。 |
生效方式 | 对受保护字段脱敏;受保护字段进入计算链路时直接拦截。 | 向查询自动注入行过滤条件。 |
授权模型 | 字段级授权:读(指定脱敏算法)或写。 | 行级授权:仅读。 |
对写操作(DML)的处理 | 无字段写授权时,对受保护字段的 | 不做行级拦截,仅做风险提醒。 |
未授权时的表现 | 行仍然可见,但受保护字段返回脱敏值。 | 未授权的行整行不可见(被过滤)。 |
前提条件
保护规则的设置和授权需要管理员权限。关于用户角色的更多信息,请参见管理用户。
需要保护的数据库实例已作为数据源录入 Agent 数据网关。
设置保护规则
字段级保护设置
字段级保护用于对表中的敏感字段配置脱敏方式。设置入口为数据保护中心 > 保护对象管理 > 字段级页签,支持以下两种视图:
全局列表:展示当前账号下所有已标记的受保护字段,可按字段关键词搜索。
按表查看:先定位到某张表,查看该表全部字段,并对其中字段进行标记或取消标记。
新增字段级保护规则的操作步骤如下:
登录AI原生数据库服务控制台。
在左侧导航栏,单击Agent 数据网关,进入 Agent Gateway 控制台。
在控制台左侧导航栏,选择数据保护中心 > 保护对象管理,单击字段级页签。
单击新增字段设置。
依次选择库、表、字段。
配置无权限时的脱敏算法(缺省为全遮掩)。
配置可申请权限的脱敏算法(可多选,缺省为明文),即后续授权时允许选择的算法范围。
单击保存。保存后规则立即生效,所有无权限用户对该字段的查询结果都会被脱敏。
编辑或移除字段级保护规则时:
编辑:若收窄了可申请权限的脱敏算法范围,已授出的越界算法授权会被自动级联回收,范围内的授权保留。
移除:移除字段保护时,该字段上已授出的全部字段级权限会被级联回收,随后字段恢复为普通字段(明文可见)。
行级保护设置
行级保护用于对表中的数据行配置可见性规则。设置入口为数据保护中心 > 保护对象管理 > 行级页签,同样支持全局列表与按表查看两种视图。列表展示每条规则的规则名称、实例、库、表、类型(按行保护或按维度隔离)、受控谓词或维度字段。
新增行级保护规则的操作步骤如下:
在保护对象管理页面,单击行级页签,然后单击新增行设置。
填写规则名称(不能重复)。
依次选择库、表。
选择规则类型:
按维度隔离:指定一个维度字段(如
dept、region)。保存后该表默认对所有未授权用户全部不可见,需要通过行级授权按维度取值放开。按行保护:填写受控条件。保存后命中该条件的行对未授权用户不可见,其余行不受影响。
单击保存。
同一张表只能选择一种行规则类型。即当表上已存在按行保护规则时,不能再创建按维度隔离规则,反之亦然。
授权
字段级授权
字段级保护设置完成后,默认所有用户查询都返回脱敏值。需要查看明文的用户或 Agent,需由管理员授权。
在控制台左侧导航栏,选择用户管理 > 权限管理。
单击新增授权。
授权范围选择字段。
依次选择库、表、字段(须为已标记的受保护字段)。
选择权限类型:
读(查询):需同时指定授权后使用的脱敏算法,且必须在该字段配置的可申请权限的脱敏算法范围内。
写(变更):放开对该字段的写入(
INSERT、UPDATE等 DML)。未获写授权的用户对受保护字段执行写操作会被直接拦截。
设置有效期(起止时间),到期后权限自动失效。
单击提交。
行级授权
行管控规则创建后,通过行级授权控制每个用户或 Agent 的可见行范围。
行级授权仅支持读(查询)权限类型。行级保护只对查询生效,写操作不做行级拦截,仅做风险提醒。
在权限管理页面,单击新增授权。
授权范围选择行。
选择表:先选择数据库,再选择表。
选择行:从下拉列表中选择该表上已配置的行管控规则,展示为
规则名(库.表/类型)。权限类型勾选读(查询)。
按规则类型完成差异化配置:
按行保护:页面展示该规则的受控条件(如
WHERE tenant_id = 'tenant_a'),条件由行管控规则定义,授权时不可修改。授权后该用户即可看到命中受控条件的数据行。按维度隔离:为每个维度字段指定被授权的取值集合(如
dept ∈ {销售部, 市场部})。
设置有效期。
单击提交。
保护效果
脱敏效果
以 customer_info 表为例,phone 字段已设置保护(无权限时为全遮掩,可申请范围为明文、半遮掩)。用户执行以下查询:
SELECT name, phone FROM customer_info;不同权限下的返回结果如下:
用户权限状态 | phone 返回值 | 说明 |
无字段读授权 |
| 按字段基线无权限时的脱敏算法(全遮掩)兜底返回。 |
已授权 |
| 按授权中指定的算法(半遮掩)返回。 |
已授权 |
| 明文可见。 |
授权已过期或被回收 |
| 回落到基线脱敏算法。 |
对当前用户仍处于脱敏态的受保护字段(包括无授权、仅授权了半遮掩等脱敏算法、授权已过期等情况),只允许出现在 SELECT 投影位置,在查询结果中以脱敏值返回;一旦进入计算链路,SQL 会被拒绝执行。
行过滤效果
按行保护效果
规则:采购表上受控条件为 dept = '财务部'。用户执行以下查询:
SELECT * FROM purchase_orders;用户权限状态 | 实际执行效果 | 可见数据 |
无行级授权 | 注入 | 除财务部外的全部记录。 |
已授权该规则 | 不注入过滤条件。 | 全部记录(含财务部)。 |
按维度隔离效果
规则:采购表上维度字段为 dept。不同权限下的执行效果如下:
用户权限状态 | 实际执行效果 | 可见数据 |
无行级授权 | 注入 | 空结果(全部不可见)。 |
已授权 | 注入 | 仅销售部的记录。 |
已授权 | 注入 | 销售部与市场部的记录。 |
已授权 | 不注入过滤条件。 | 全部记录。 |