文档首页 > > 开发指南> 管理数据库安全> 管理用户及权限> 数据脱敏

数据脱敏

分享
更新时间: 2020/05/26 GMT+08:00

DWS数据库权限访问控制可限制到表的列级别和行级别,在当前数据库权限系统下,若需要对某个用户隐藏敏感信息,只能收回表或列上的权限,对于用户越权查询只能提供报错的形式结束。

DWS支持数据脱敏,以更高的可用性来保护敏感信息。用户可以在表对象上创建数据脱敏(data redaction)策略,策略是指针对特定数据库用户、特定数据对象、特定的SQL操作、特定的重编方式的一个组合。通过数据脱敏特性,可以对一些用户将敏感信息隐藏,已保证敏感信息安全。

数据脱敏的目的是为了控制表中某些数据列的隐私泄露,通过将列对象绑定Redac策略,在查询重写阶段将满足条件的重编策略应用到执行计划上,影响最终SELECT的执行结果。

为保证数据状态的安全,insert into select,update from,merge into等包含脱敏信息时,会报错提示拒绝执行。

DWS提供函数接口用于创建、修改及删除脱敏策略,具体请参考数据脱敏函数

场景示例:某表中汇总了个人信息,个人信息中很多属性属于敏感数据,对于敏感列创建脱敏策略。

创建用户alice,bob和peter。

CREATE ROLE alice PASSWORD 'Gauss@123';
CREATE ROLE bob PASSWORD 'Gauss@123';
CREATE ROLE peter PASSWORD 'Gauss@123';

用户alice在public模式下创建表customer用于记录所用用户信息(名字,工资)。

CREATE TABLE public.customer(id int, name varchar(100), salary int);

向数据表插入三个用户。

INSERT INTO customer VALUES(1, 'Michael', 10000);
INSERT INTO customer VALUES(2, 'bryant', 20000);
INSERT INTO customer VALUES(3, 'harden', 15000);

alice将表customer的读取权限赋予bob和peter。

GRANT SELECT ON customer TO bob, peter;

alice不希望bob和peter看到工资数据,为customer表添加脱敏策略。

SELECT DBMS_REDACT.add_policy(object_schema=>'public',object_name=>'customer',policy_name=>'pol_1',column_name=>'salary',expression=>'1=1');

切换用户至bob和peter,无法看到customer表的工资数据。

set role bob password 'Gauss@123';
SET
select * from customer;
id |  name   | salary
----+---------+--------
1 | Michael |      
2 | bryant  |      
3 | harden  |      
(3 rows)

set role peter password 'Gauss@123';
SET
select * from customer;
id |  name   | salary
----+---------+--------
1 | Michael |      
2 | bryant  |      
3 | harden  |      
(3 rows)

alice改变主意,不希望peter查看到工资数据,修改策略。

SELECT DBMS_REDACT.alter_policy(object_schema=>'public',object_name=>'customer',policy_name=>'pol_1',action=>'3',expression=>'SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') = ''peter''');

切换至用户bob,可以查看到customer表的工资数据。

set role bob password 'Gauss@123';
SET
SELECT * FROM customer;
id |  name   | salary
----+---------+--------
1 | Michael |  10000
2 | bryant  |  20000
3 | harden  |  15000
(3 rows)

查看已有的脱敏策略和脱敏列信息。

select * from redaction_policies;
 object_schema | object_owner | object_name | policy_name |                              expression                              | enable | policy_description
---------------+--------------+-------------+-------------+----------------------------------------------------------------------+--------+--------------------
 public        | yxw          | customer    | pol_1       | (sys_context('USERENV'::text, 'CURRENT_USER'::text) = 'peter'::text) | t      |
(1 row)

select * from redaction_columns;
 object_schema | object_owner | object_name | column_name | function_type | function_parameters | regexp_pattern | regexp_replace_string | regexp_position | regexp_occurrence | regexp_match_parameter | colum
n_description
---------------+--------------+-------------+-------------+---------------+---------------------+----------------+-----------------------+-----------------+-------------------+------------------------+------
--------------
 public        | yxw          | customer    | salary      |             1 |                     |                |                       |                 |                   |                        |
(1 row)
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问