Oracle 12c Cloud Control中的数据掩码(Data Masking)功能实验日志

Data Masking with Oracle Enterprise Manager 12c Cloud Control

实验环境:
Cloud Control Version: 12.1.0.4.0
Database Version:11.2.0.4 + RAC

1.创建测试数据表,我将分别对表中的几列(日期,数字,字符类型)进行掩码实验
create table tt.employees 
(employee_id int primary key,
employee_name varchar2(20) not null,
email varchar2(50),
phone_number varchar2(20),
hire_date date,
salary int,
department_id int);

alter session set nls_date_format='yyyy-mm-dd';
insert into tt.employees values (1,'Mike','mike@atos.net','13889876543','1969-03-15',21000,10);
insert into tt.employees values (2,'Jack','jack@atos.net','13938135432','1973-04-26',19000,10);
insert into tt.employees values (3,'Helen','helen@atos.net','18640113245','1933-01-06',13000,10);
commit;

2.安装DM_FMTLIB掩码格式包(系统自带的格式包,如果不用可以不装)
  1. Locate the following scripts in your Enterprise Manager installation:

    $ORACLE_HOME/sysman/admin/emdrep/sql/db/latest/masking/dm_fmtlib_pkgdef.sql
    $ORACLE_HOME/sysman/admin/emdrep/sql/db/latest/masking/dm_fmtlib_pkgbody.sql
    
  2. Copy these scripts to a directory in your target database installation and execute them using SQL*Plus, connected as a user that can create packages in the DBSNMP schema.

    3.  View query result. 
TT@BWC2(dm02db02)> select owner,object_type,object_name from dba_objects where object_name='DM_FMTLIB';

OWNER                              OBJECT_TYPE   OBJECT_NAME
------------------------------ ------------------- ------------------------------------------------------------------------------------------------------------DBSNMP                             PACKAGE             DM_FMTLIB
DBSNMP                             PACKAGE BODY  DM_FMTLIB

2 rows selected.

3.登录12c Cloud Control,创建应用数据模型,在菜单项中选择Enterprise-->Quality Management--->Application Data Models---->Create








上面的步骤就创建完了应用数据模型,接下来进入数据掩码定义阶段



在这里需要定义每列的掩码格式:
定义好之后的状态,具体的列定义格式在本文的后面可以看到。
定义好列格式之后就可以生成脚本了
这里有两个选项In-Place Masking和At-Source Masking,显示如果你已经是在测试环境操作则选择in-place选项直接掩码表中的数据,但如果是在生产环境下可以选择at-source选项,后续可以通过数据泵工具导入掩码数据。这里我选择的是at-source,后面会有in-place的演示。

生成完脚本之后,点击Schedule Job按钮如下:
可以点击查看job运行情况


这时带有掩码的数据表已经导出了。
4.在测试环境下导入经过掩码的数据,这里我就直接将带有掩码的表重新命名为test_employees

[oracle@dm02db02 bwc]$ impdp tt/tt directory=DUMP_BWC dumpfile=EXPDAT01_TT.DMP logfile=IMPDATA01_TT.LOG remap_table=EMPLOYEES:test_employees tables=employees

Import: Release 11.2.0.4.0 - Production on Thu Jun 23 09:57:52 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Master table "TT"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "TT"."SYS_IMPORT_TABLE_01": tt/******** directory=DUMP_BWC dumpfile=EXPDAT01_TT.DMP logfile=IMPDATA01_TT.LOG remap_table=EMPLOYEES:test_employees tables=employees 
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "TT"."TEST_EMPLOYEES" 7.617 KB 3 rows
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "TT"."SYS_IMPORT_TABLE_01" successfully completed at Thu Jun 23 09:58:06 2016 elapsed 0 00:00:02

5.验证原始表和掩码表中的数据
SYS@BWC1(dm02db01)> select * from tt.test_employees;

EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUMBER HIRE_DATE SALARY DEPARTMENT_ID
----------- -------------------- -------------------------------------------------- -------------------- ------------------- ---------- -------------
1 Abbott Abner@atos.net 9406212140 1999-12-23 17:17:30 3870 10
2 Jack Adolph@atos.net 5642840231 1998-07-07 21:52:41 19901 10
3 Tonny Abraham@atos.net 8625934032 1987-01-12 16:47:22 11392 10

SYS@BWC1(dm02db01)> select * from tt.employees;

EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUMBER HIRE_DATE SALARY DEPARTMENT_ID
----------- -------------------- -------------------------------------------------- -------------------- ------------------- ---------- -------------
1 Mike mike@atos.net 13889876543 1969-03-15 00:00:00 21000 10
2 Jack jack@atos.net 13938135432 1973-04-26 00:00:00 19000 10
3 Helen helen@atos.net 18640113245 1933-01-06 00:00:00 13000 10


6.如果已经是测试环境的话,可以直接操作表中数据,我将表中的行记录数扩展至10W行后,再测试下执行速度
SYS@BWC1(dm02db01)> begin
2 for i in 5..100000 loop
3 insert into tt.employees values (i,'qqqq'||i,'xxx@ss.com','18640128331','1982-04-26',10000,15);
4 end loop;
5 commit;
6 end;
7 /

PL/SQL procedure successfully completed.

SYS@BWC1(dm02db01)> select count(1) from tt.employees;

COUNT(1)
----------
100000

在Data Masking Definitions页面点击Generate Script,选择In-Place Masking


job执行失败了,日志显示Not connected.


7.虽然job失败了,但是生成掩码的sql脚本却成生了,我们也可以手动执行生成的sql脚本。
[oracle@dm02db02 dbs]$ ls
-rw-r----- 1 oracle oinstall 160553 Jun 23 13:40 masking119.sql
-rw-r----- 1 oracle oinstall 10157 Jun 23 13:40 masking113.log
[oracle@dm02db02 dbs]$ 

SYS@BWC2(dm02db02)> @masking119.sql

TT@BWC2(dm02db02)> select * from employees where rownum<20;

EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUMBER HIRE_DATE SALARY DEPARTMENT_ID
----------- -------------------- -------------------------------------------------- -------------------- --------- ---------- -------------
3 Philip Jack@atos.net 4142485680 08-JUL-74 12810 10
1 Addison Adair@atos.net 4020557081 06-DEC-86 8401 10
2 Luke Abraham@atos.net 5010168142 25-MAR-82 7232 10
431 Adolph Tonny@atos.net 9048471411 22-APR-80 3991 15
1422 Philip Tonny@atos.net 9048471411 22-APR-80 3991 15
19395 Addison Tonny@atos.net 9048471411 22-APR-80 3991 15
20090 Mike Tonny@atos.net 9048471411 22-APR-80 3991 15
20089 Adonis Tonny@atos.net 9048471411 22-APR-80 3991 15
20088 Abner Tonny@atos.net 9048471411 22-APR-80 3991 15
20087 Andy Tonny@atos.net 9048471411 22-APR-80 3991 15
20086 Abbott Tonny@atos.net 9048471411 22-APR-80 3991 15
20085 Andy Tonny@atos.net 9048471411 22-APR-80 3991 15
20084 Mike Tonny@atos.net 9048471411 22-APR-80 3991 15
20083 Abbott Tonny@atos.net 9048471411 22-APR-80 3991 15
20082 Abner Tonny@atos.net 9048471411 22-APR-80 3991 15
20081 Abner Tonny@atos.net 9048471411 22-APR-80 3991 15
20080 Adam Tonny@atos.net 9048471411 22-APR-80 3991 15
20079 Mike Tonny@atos.net 9048471411 22-APR-80 3991 15
20078 Adam Tonny@atos.net 9048471411 22-APR-80 3991 15

19 rows selected.

提示:对于一个10W行的表在运行sql脚本时,还是比较快的,这里还必须注意的是,Data Masking可能是根据列值进行hash算法算出的掩码值,如果列的值是相同的,在跑过sql脚本以后,这些列的值既然被掩盖了,但列的值仍然是相同的。

--每列中的格式定义如下:
email字段掩码格式由2部分组成,第一部分是固定名字的数组,第二部分是固定字符串。
hire_date字段是由随机日期生成,起止日期为1972.1.1--2004.1.1
Employee_name列由固定名字的数组组成
PHONE_NUMBER字段由系统自带的格式包组成,点击Import Format按钮,选择国际电话格式
Salary列由随机数字组成,起止范围2000--20000



http://www.oracle.com/technetwork/database/options/data-masking-subsetting/overview/index.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26753337/viewspace-2120837/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26753337/viewspace-2120837/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值