DataMasking安装使用.docx
- 文档编号:24117759
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:23
- 大小:549.26KB
DataMasking安装使用.docx
《DataMasking安装使用.docx》由会员分享,可在线阅读,更多相关《DataMasking安装使用.docx(23页珍藏版)》请在冰豆网上搜索。
DataMasking安装使用
DataMasking安装和使用指南
1.Datamasking简介
软件开发的最后阶段,是需要尽量真实的数据来作为基础测试软件的一系列功能。
尤其是企业信息化系统,ERP、BI、EPM等这些大型系统实施或开发的时候,对于基础数据的要求很严格,很多时候都是直接克隆生产环境的数据来进行软件系统的测试,但是随之而来的影响却是深远的,生产数据中,首先它是一个真实的数据,透过数据基本上掌握了整个企业的资料。
其次,在这当中包含很多敏感数据,不光是敏感数据,而且还是真实的敏感数据。
如果在测试环境中发生了信息泄露问题,那么对于企业数据安全将造成致命的后果。
ORACLRE在OEM10g之后提供DataMaskingpack组件,解决从生产环境的数据向测试环境(或者开发环境)导入时可能会产生的数据内容安全问题,datamasking特点是:
按照指定的规则进行数据转换,可以通过规则控制最终生成的数据格式;维护数据表间的引用关系;通过EM图形界面来定义DataMasking,容易理解和使用。
流程如下图所示:
2.安装DataMaskingPack组件
OEM10g版本是10.2.0.4,提供了新6个pack功能,DataMaskingPack就是其中之一。
因此,要使用安装,升级至最新的版本。
使用GridControl+OEM方便得使用管理DataMasking。
注:
使用DataMasking的前提条件,安装GridControl,升级OEM10g到10.2.0.4版本。
安装GridControl软件。
下载介质:
从oracle官方网站下载gc_102011_linux.zip,补丁包GridControl_10.2.0.4_LINUX.zip。
具体安装步骤详见文档:
OracleGridControl10.2.0.4forLinux安装和配置指南。
3.通过GridControl使用DataMasking
1.进入管理界面
使用SYSMAN用户登录OracleEnterpriseManger10g(GridControl)。
进入GridControl主界面后,点击“Targets”
进入Targets管理界面,点击“Database”
选择要进行管理的数据库,如图,进入“emrep”(数据库名)进行配置。
进入要管理的数据库之后,点击“Administration”。
进入管理界面后,看见DataMaskingpack组件选项,点击“Definition”进入DataMasking进行管理与配置。
2.定义/配置DataMasking
1.添加一个定义
1.选择需要mask的数据库,点击“Mask”,进入配置界面
2.选择要mask的表,以及对应的列,并对格式进行定义。
3.选择列转换规则(ArrayList,FixedNumber,Fixedstring等转化规则,根据实际需求选择)
注:
对定义TT用户的Mask表的列选择“随机字符串”转化规则
注:
指定随机字符串的长度
2.生成列转化规则脚本
脚本的内容为:
setechooff
setfeedbackoff
setserveroutputon
setpagesize0
spool/u02/app/oragrid/OracleHomes/db10g/dbs/masking14.log
--ScriptHeaderSection
--==============================================
--functionsandprocedures
CREATEORREPLACEPROCEDUREmgmt$mask_sendMsg(msgINVARCHAR2)IS
msg1VARCHAR2(1020);
lenINTEGER:
=length(msg);
iINTEGER:
=1;
BEGIN
dbms_output.enable(1000000);
LOOP
msg1:
=SUBSTR(msg,i,255);
dbms_output.put_line(msg1);
len:
=len-255;
i:
=i+255;
EXITWHENlen<=0;
ENDLOOP;
ENDmgmt$mask_sendMsg;
/
CREATEORREPLACEPROCEDUREmgmt$mask_errorExit(msgINVARCHAR2)IS
BEGIN
mgmt$mask_sendMsg(msg);
mgmt$mask_sendMsg('errorExit!
');
ENDmgmt$mask_errorExit;
/
CREATEORREPLACEPROCEDUREmgmt$mask_errorExitOraError(msgINVARCHAR2,errMsgINVARCHAR2)IS
BEGIN
mgmt$mask_sendMsg(msg);
mgmt$mask_sendMsg(errMsg);
mgmt$mask_sendMsg('errorExitOraError!
');
ENDmgmt$mask_errorExitOraError;
/
CREATEORREPLACEPROCEDUREmgmt$mask_checkDBAPrivs(user_nameINVARCHAR2)
AUTHIDCURRENT_USERIS
granted_roleREAL:
=0;
BEGIN
EXECUTEIMMEDIATE'SELECT1FROMSYS.DBA_ROLE_PRIVSWHEREGRANTED_ROLE=''DBA''ANDGRANTEE=(SELECTUSERFROMDUAL)'
INTOgranted_role;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
mgmt$mask_sendMsg('WARNINGcheckingprivileges...UserName:
'||user_name);
mgmt$mask_sendMsg('UserdoesnothaveDBAprivs.');
mgmt$mask_sendMsg('Thescriptwillfailifittriestoperformoperationsforwhichtheuserlackstheappropriateprivilege.');
ENDmgmt$mask_checkDBAPrivs;
/
CREATEORREPLACEPROCEDUREmgmt$mask_setUpJobTable(script_idININTEGER,job_tableINVARCHAR2,step_numOUTINTEGER)
AUTHIDCURRENT_USERIS
ctsql_textVARCHAR2(200):
='CREATETABLE'||job_table||'(SCRIPT_IDNUMBER,LAST_STEPNUMBER,unique(SCRIPT_ID))';
itsql_textVARCHAR2(200):
='INSERTINTO'||job_table||'(SCRIPT_ID,LAST_STEP)values(:
1,:
2)';
stsql_textVARCHAR2(200):
='SELECTlast_stepFROM'||job_table||'WHEREscript_id=:
1';
TYPECurTypISREFCURSOR;--defineweakREFCURSORtype
stsql_curCurTyp;--declarecursorvariable
BEGIN
step_num:
=0;
BEGIN
EXECUTEIMMEDIATEctsql_text;
EXCEPTION
WHENOTHERSTHEN
NULL;
END;
BEGIN
OPENstsql_curFOR--opencursorvariable
stsql_textUSINGscript_id;
FETCHstsql_curINTOstep_num;
IFstsql_cur%FOUNDTHEN
NULL;
ELSE
EXECUTEIMMEDIATEitsql_textUSINGscript_id,step_num;
COMMIT;
step_num:
=1;
ENDIF;
CLOSEstsql_cur;
EXCEPTION
WHENOTHERSTHEN
mgmt$mask_errorExit('ERRORselectingorinsertingfromtable:
'||job_table);
return;
END;
return;
EXCEPTION
WHENOTHERSTHEN
mgmt$mask_errorExit('ERRORaccessingtable:
'||job_table);
return;
ENDmgmt$mask_setUpJobTable;
/
CREATEORREPLACEPROCEDUREmgmt$mask_deleteJobTableEntry(script_idININTEGER,job_tableINVARCHAR2,step_numININTEGER,highest_stepININTEGER)
AUTHIDCURRENT_USERIS
delete_textVARCHAR2(200):
='DELETEFROM'||job_table||'WHERESCRIPT_ID=:
1';
BEGIN
IFstep_num<=highest_stepTHEN
return;
ENDIF;
BEGIN
EXECUTEIMMEDIATEdelete_textUSINGscript_id;
IFSQL%NOTFOUNDTHEN
mgmt$mask_errorExit('ERRORdeletingentryfromtable:
'||job_table);
return;
ENDIF;
EXCEPTION
WHENOTHERSTHEN
mgmt$mask_errorExit('ERRORdeletingentryfromtable:
'||job_table);
return;
END;
COMMIT;
ENDmgmt$mask_deleteJobTableEntry;
/
CREATEORREPLACEPROCEDUREmgmt$mask_setStep(script_idININTEGER,job_tableINVARCHAR2,step_numININTEGER)
AUTHIDCURRENT_USERIS
update_textVARCHAR2(200):
='UPDATE'||job_table||'SETlast_step=:
1WHEREscript_id=:
2';
BEGIN
--updatejobtable
EXECUTEIMMEDIATEupdate_textUSINGstep_num,script_id;
IFSQL%NOTFOUNDTHEN
mgmt$mask_sendMsg('NOTFOUNDEXCEPTIONofsql_text:
'||update_text);
mgmt$mask_errorExit('ERRORaccessingtable:
'||job_table);
return;
ENDIF;
COMMIT;
EXCEPTION
WHENOTHERSTHEN
mgmt$mask_errorExit('ERRORaccessingtable:
'||job_table);
return;
ENDmgmt$mask_setStep;
/
CREATEORREPLACEFUNCTIONmgmt$mask_randomencode(i_inputVARCHAR2,pad_lengthNUMBER)RETURNVARCHAR2
AUTHIDCURRENT_USERIS
TYPEcharmapISTABLEOFVARCHAR2
(1)INDEXBYBINARY_INTEGER;
l_inputNUMBER;
l_modNUMBER;
l_retCodeVARCHAR2(100);
l_mapcharmap;
l_basenumber:
=25;
BEGIN
if(i_inputisnull)then
returnlpad('a',pad_length,'a');
endif;
l_map(0):
='a';
l_map
(1):
='b';
l_map
(2):
='c';
l_map(3):
='d';
l_map(4):
='e';
l_map(5):
='f';
l_map(6):
='g';
l_map(7):
='h';
l_map(8):
='i';
l_map(9):
='j';
l_map(10):
='k';
l_map(11):
='l';
l_map(12):
='m';
l_map(13):
='n';
l_map(14):
='o';
l_map(15):
='p';
l_map(16):
='q';
l_map(17):
='r';
l_map(18):
='s';
l_map(19):
='t';
l_map(20):
='u';
l_map(21):
='v';
l_map(22):
='w';
l_map(23):
='x';
l_map(24):
='y';
l_map(25):
='z';
l_input:
=i_input;
l_retCode:
='';
LOOP
--skip'a'forpadding
l_mod:
=l_inputmodl_base+1;
l_retCode:
=l_map(l_mod)||l_retCode;
IF(l_input>=l_base)THEN
l_input:
=round(l_input/l_base);
ELSE
l_input:
=0;
ENDIF;
--dbms_output.put_line('left'||l_input||'mod'||l_mod);
EXITWHENl_input=0;
ENDLOOP;
returnlpad(l_retCode,pad_length,'a');
END;
/
createorreplacetypemgmt$mask_array_listastableofvarchar2(128)
/
CREATEORREPLACEPROCEDUREmgmt$step_1_14(script_idININTEGER,job_tableINVARCHAR2,step_numINOUTINTEGER)
AUTHIDCURRENT_USERIS
sqlerr_msgVARCHAR2(100);
BEGIN
IFstep_num<>1THEN
return;
ENDIF;
mgmt$mask_setStep(14,'MGMT$MASK_CHECKPOINT',step_num);
step_num:
=step_num+1;
BEGIN
mgmt$mask_sendMsg('declare
adjnumber:
=0;
begin
selectlength(count(distinctNAME))intoadjfrom"TT"."MASK";
adj:
=greatest(adj-1,0);
executeimmediate''createtableMGMT_DM_TT_15(orig_val,new_val)NOLOGGINGas
selects.orig_val,
CAST(lpad(lower(dbms_random.string(''''l'''',trunc(dbms_random.value(1,7-least(7,greatest(''||adj||''-0,0)))))),7-least(7,greatest(''||adj||''-0,0)),''''a'''')
||mgmt$mask_randomencode(nvl(substr(s.new_num,1,1+least(7,greatest(''||adj||''-0,0))),''''0''''),1+least(7,greatest(''||adj||''-0,0)))
ASVARCHAR2(10))new_val
from(selectrownumrn
orig_val
lpad(rownum-1,''||adj||''+1,0)new_num
from(selectdistinctNAMEorig_valfrom"TT"."MASK"
orderbydbms_random.value))s
where1=1
'';
DBMS_STATS.GATHER_TABLE_STATS(NULL,''"MGMT_DM_TT_15"'',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,degree=>DBMS_STATS.DEFAULT_DEGREE);
end;
');
EXECUTEIMMEDIATE'declare
adjnumber:
=0;
begin
selectlength(count(distinctNAME))intoadjfrom"TT"."MASK";
adj:
=greatest(adj-1,0);
executeimmediate''createtableMGMT_DM_TT_15(orig_val,new_val)NOLOGGINGas
selects.orig_val,
CAST(lpad(lower(dbms_random.string(''''l'''',trunc(dbms_random.value(1,7-least(7,greatest(''||adj||''-0,0)))))),7-least(7,greatest(''||adj||''-0,0)),''''a'''')
||mgmt$mask_randomencode(nvl(substr(s.new_num,1,1+least(7,greatest(''||adj||''-0,0))),''''0''''),1+least(7,greatest(''||adj||''-0,0)))
ASVARCHAR2(10))new_val
from(selectrownumrn
orig_val
lpad(rownum-1,''||adj||''+1,0)new_num
from(selectdistinctNAMEorig_valfrom"TT"."MASK"
orderbydbms_random.value))s
where1=1
'';
DBMS_STATS.GATHER_TABLE_STATS(NULL,''"MGMT_DM_TT_15"'',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,degree=>DBMS_STATS.DEFAULT_DEGREE);
end;
';
EXCEPTION
WHENOTHERSTHEN
sqlerr_msg:
=SUBSTR(SQLERRM,1,100);
mgmt$mask_errorExitOraError('ERRORexecutingsteps',sqlerr_msg);
step_num:
=-1;
return;
END;
ENDmgmt$step_1_14;
/
CREATEORREPLACEPROCEDUREmgmt$step_2_14(script_idININTEGER,job_tableINVARCHAR2,step_numINOUTINTEGER)
AUTHIDCURRENT_USERIS
sqlerr_msgVARCHAR2(100);
BEGIN
IFstep_num<>2THEN
return;
ENDIF;
mgmt$mask_setStep(14,'MGMT$MASK_CHECKPOINT',step_num);
step_num:
=step_num+1;
BEGIN
mgmt$mask_sendMsg('ALTERTABLE"TT"."MASK"RENAMETO"MASK$DMASK"');
EXECUTEIMMEDIATE'ALTERTABLE"TT"."MASK"RENAMETO"MASK$DMASK"';
EXCEPTION
WHENOTHERSTHEN
sqlerr_msg:
=SUBSTR(SQLERRM,1,100);
mgmt$mask_errorExitOraError('ERRORexecutingsteps',sqlerr_msg);
step_num:
=-1;
return;
END;
ENDmgmt$step
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DataMasking 安装 使用
