DBLOG
» WTF
Toggle navigation
DBLOG
主页
OCM
1、概览
2、数据导入导出
3、GaussDB(DWS)数据库管理
4、数据库调优与开发实践
5、湖仓一体
6、开发应用
7、集群管理
8、巡检和维运维
About Me
归档
标签
8、数据脱敏
无
2025-05-22 15:09:00
0
0
0
admin
# 数据脱敏原理 - **数据脱敏(Data Masking)**:对敏感数据进行屏蔽的过程。 - **什么是敏感数据**: 1. 任何泄露后可能严重危害社会或个人的数据。 2. 常见的敏感数据包括:个人身份信息、企业不适合公开的信息、设备信息、银行卡号、受保护的健康信息、知识产权等。 - **为什么需要数据脱敏**: - 数据脱敏通过对敏感信息进行变形,采用不同的脱敏规则(如替换、重排、加密、截断、掩码等),实现隐私数据的可靠保护。 - **数据脱敏原则**: - 尽可能保留脱敏后应用的有意义信息。 - 最大程度防止黑客破解。 - **数据脱敏分类**: - **动态数据脱敏**:在访问敏感数据时实时进行脱敏处理,确保返回的数据可用且安全。 - **静态数据脱敏**:将数据抽取后进行脱敏处理,生成的数据与生产环境相隔离,以保障生产数据库的安全。 --- # 数据脱敏功能使用方法 (1) ### 创建脱敏策略 ```sql CREATE REDACTION POLICY policy_name ON table_name [ WHEN (when_expression) ] [ ADD COLUMN column_name WITH redaction_function_name ( [ argument [, ...] ] ) ] [, ... ]; ``` - **参数说明**: - `policy_name`:脱敏策略名称。 - `table_name`:脱敏策略应用的表对象。 - `when_expression`:策略生效的条件。 - `redaction_function_name`:用于脱敏敏感字段的函数。 - `column_name`:敏感字段列,支持一次配置多个字段。 --- # 数据脱敏功能使用方法 (2) ### 修改及删除脱敏策略 ```sql ALTER REDACTION POLICY policy_name ON table_name WHEN (new_when_expression); -- 修改生效条件 ALTER REDACTION POLICY policy_name ON table_name WHEN ENABLE | DISABLE; -- 启用或禁用策略 ALTER REDACTION POLICY policy_name ON table_name RENAME TO new_policy_name; -- 重命名策略 ALTER REDACTION POLICY policy_name ON table_name action; -- 新增、修改、删除脱敏列 DROP REDACTION POLICY [IF EXISTS] policy_name ON table_name; -- 删除脱敏策略 ``` --- # 数据脱敏功能使用方法 (3) ### 内置型脱敏函数 - `mask_full(column_name)`:全脱敏成固定值。 - `mask_partial(column_name, mask_digital, mask_from[, mask_to])`:数值型部分脱敏。 - `mask_partial(column_name [, input_format, output_format], mask_char, mask_from[, mask_to])`:字符型部分脱敏。 - `mask_partial(column_name, mask_field1, mask_value1, mask_field2, mask_value2, mask_field3, mask_value3)`:日期或时间类型数据的部分脱敏。 --- # 数据脱敏功能使用方法 (4) ### 扩展型脱敏函数 - 用户可以使用 PL/PGSQL 自定义脱敏函数,需遵循以下要求: - 返回值与脱敏列类型一致。 - 函数必须定义为可下推。 - 参数列表只能包含一个脱敏列。 - **示例**:系统内置脱敏函数可以覆盖常见的脱敏场景,优先推荐使用内置脱敏函数。 --- # 数据脱敏可算不可见功能 (1) ### 可算不可见功能 在数据库内使用原始的敏感数据进行加工计算,仅在出库时对敏感数据进行脱敏处理。 - **示例**:使用敏感数据进行库内计算时,若采用经过脱敏的数据,可能会影响查询结果。使用可算不可见功能需要设置开关 `enable_redactcol_computable=on`。 --- # 数据脱敏可算不可见功能 (2) ### 支持的场景 - 支持将敏感数据直接参与加工计算的场景包括: - `SELECT nullif(salary, 1) FROM emp;` - `SELECT email LIKE ‘%.com’ FROM emp;` - `SELECT to_days(birth) FROM david.emp;` - `SELECT count(*) FROM emp;` - `SELECT * FROM emp WHERE cardid IS NOT NULL;` - `SELECT name, avg(salary) * 12 FROM emp GROUP BY name;` --- # 数据脱敏可算不可见功能 (3) ### 出库时触发脱敏的场景 - 包括: - 表查询 - 视图查询 - DML RETURNING 子句 - COPY 导出 - GDS 外表导出 - 游标 CURSOR... FETCH - 存储过程定义使用脱敏表 --- # 脱敏策略的继承 - 在执行 `INSERT/UPDATE/MERGE INTO/CREATE TABLE AS` 语句时,如果子查询对敏感字段进行了投影操作,则会触发脱敏继承,确保新表中的敏感数据遵循相同的脱敏策略。 - **注意**:在遇到脱敏效果冲突时,所有冲突的字段将提升为通用脱敏效果 `mask_full`,以避免敏感数据泄露。 --- # 防护恶意套取 (1) ### 敏感信息恶意套取 使用已知敏感信息进行试探性匹配,以窃取用户隐私数据。 - **示例**: ```sql SELECT name FROM emp WHERE name IN ('张三'); -- 返回结果示例:name ----- 张* ``` --- # 防护恶意套取 (2) ### 防止恶意套取行为 数据脱敏功能采用“悲观主义”模式,禁止任何常量等值判断,以避免恶意套取风险。 - **示例**: ```sql SELECT name FROM emp WHERE name IN ('张三'); -- 返回错误:ERROR: Redaction column "name" cannot be referenced in equivalence conditions with const value. ``` --- # 防护恶意套取 (3) ### 禁止使用常量恶意套取的场景总结 1. 脱敏字段的常量等值判断表达式。 2. 存在恶意套取风险的查询格式。 --- # 数据脱敏功能使用示例 (1) ### DWS 动态数据脱敏优势 - 策略可配置,灵活预置脱敏策略。 - 策略可扩展,内置及用户自定义脱敏函数。 - 敏感数据可算不可见,仅在出库时脱敏。 - 数据访问受控,增强数据安全性。 - 全场景数据不泄露,识别恶意套取潜在场景。 --- # 数据脱敏功能使用示例 (2) ### 创建脱敏策略 以员工表 `emp` 为例,创建脱敏策略 `mask_emp`: ```sql CREATE REDACTION POLICY mask_emp ON emp WHEN (current_user != 'alice') ADD COLUMN card_no WITH mask_full(card_no), ADD COLUMN card_string WITH mask_partial(card_string, 'VVVVFVVVVFVVVVFVVVV', 'VVVV-VVVV-VVVV-VVVV', '#', 1, 12), ADD COLUMN salary WITH mask_partial(salary, '9', 1, length(salary) - 2); ``` --- # 数据脱敏功能使用示例 (3) ### 查看脱敏效果 切换到用户 `matu`,查看员工表 `emp`: ```sql SET ROLE matu PASSWORD 'Gauss@123'; SELECT * FROM emp; ``` --- # 数据脱敏功能使用示例 (4) ### 更改脱敏策略生效条件 ```sql ALTER REDACTION POLICY mask_emp ON emp WHEN (current_user NOT IN ('alice', 'matu')); ``` 切换到用户 `matu`,查询结果为脱敏前信息。 --- # 数据脱敏功能使用示例 (5) ### 更改脱敏列 新增脱敏列: ```sql ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN phone_no WITH mask_partial(phone_no, '*', 4); ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN email WITH mask_partial(email, '*', 1, position('@' in email)); ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN birthday WITH mask_full(birthday); ``` 切换到用户 `july`,查看员工表 `emp`。 --- # 数据脱敏功能使用示例 (6) ### 删除脱敏策略 ```sql DROP REDACTION POLICY mask_emp ON emp; ``` **数据脱敏相关视图**: ```sql SELECT * FROM redaction_policies; SELECT object_name, column_name, function_info FROM redaction_columns; ```
上一篇:
7、智能运维
下一篇:
9、审计日志
0
赞
1 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网