版本要求:V8.1.3.37以上的季度版/月度版

设置:ENABLE_RLS=1 ,然后重新启动数据库服务;

数据准备:

CONN SYSDBA/SYSDBA
DROP USER USER01 CASCADE;
DROP USER WANGFANG CASCADE;

CREATE USER USER01 IDENTIFIED BY USER012345;
GRANT DBA TO USER01;
CREATE USER WANGFANG IDENTIFIED BY WANGFANG012345;
GRANT DBA TO WANGFANG;


第一步:建立测试数据表(T_MASK)
CONN USER01/USER012345
DROP TABLE T_MASK;
CREATE TABLE T_MASK(CNAME VARCHAR2(30),C_TEL VARCHAR2(18));
INSERT INTO T_MASK VALUES('LIMING','18971689386');
INSERT INTO T_MASK VALUES('WANGFANG','13129967967');
INSERT INTO T_MASK VALUES('WANGDONGDONG','027-85933213');
COMMIT;

----不要打我电话哈,贡献我自己的手机号来做测试数据。

第二步:建立测试函数
CONN USER01/USER012345
--DROP FUNCTION POLICY_FUN;
CREATE FUNCTION POLICY_FUN(P_OWNER IN VARCHAR2, P_OBJ   IN VARCHAR2)
  RETURN VARCHAR(8188) IS
  L_RET VARCHAR(8188);
BEGIN
  IF (P_OWNER = USER) THEN
     L_RET := 'CNAME=''LIMING''';
  ELSE 
     L_RET := 'CNAME=SYS_CONTEXT(''USERENV'',''SESSION_USER'')';
  END IF;
  RETURN L_RET;
END;
/

第三步:创建掩码函数
CONN USER01/USER012345
--DROP FUNCTION MASK_FUN;
CREATE OR REPLACE FUNCTION MASK_FUN(C_TEL VARCHAR) RETURN VARCHAR AS
BEGIN
RETURN INSSTR(C_TEL,5,4,'****');
END;
/

第四步:创建脱敏策略
CONN SYSDBA/SYSDBA
--DBMS_RLS.DROP_POLICY('USER01','T_MASK','C1_POLICY_CHAR');
BEGIN
  DBMS_RLS.ADD_POLICY(OBJECT_SCHEMA         => 'USER01',
                      OBJECT_NAME           => 'T_MASK',
                      POLICY_NAME           => 'C1_POLICY_CHAR',
                      FUNCTION_SCHEMA       => 'USER01',
                      POLICY_FUNCTION       => 'POLICY_FUN',
                      STATEMENT_TYPES       => 'SELECT',
                      SEC_RELEVANT_COLS     => 'C_TEL',
                      SEC_RELEVANT_COLS_OPT => DBMS_RLS.ALL_ROWS);
END;
/

--DBMS_RLS.DROP_MASK('USER01', 'T_MASK', 'C_TEL');
DBMS_RLS.ADD_MASK('USER01', 'T_MASK', 'C_TEL', 'USER01', NULL, 'MASK_FUN');

第五步:USER01查看执行脱敏后的表中数据
CONN USER01/USER012345
SELECT * FROM USER01.T_MASK;
------
--行号       CNAME        C_TEL
---------- ------------ ------------
--1          LIMING       18971689386
--2          WANGFANG     1312****967
--3          WANGDONGDONG 027-****3213
------
------SYSDBA查看表中数据(完全未脱敏)
CONN SYSDBA/SYSDBA
SELECT * FROM USER01.T_MASK;
------
--行号       CNAME        C_TEL
---------- ------------ ------------
--1          LIMING       18971689386
--2          WANGFANG     13129967967
--3          WANGDONGDONG 027-85933213
------

------WANGFANG查看执行脱敏后的表中数据
CONN WANGFANG/WANGFANG012345
SELECT * FROM USER01.T_MASK;
--行号       CNAME        C_TEL
---------- ------------ ------------
--1          LIMING       1897****386
--2          WANGFANG     13129967967
--3          WANGDONGDONG 027-****3213
------

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐