1、叱咤风云GoldenGate企业级运维实战第10章GoldenGate的安全特性第10章 GoldenGate的安全特性GoldenGate软件已经被很多大型企业用于数据容灾。如果用作异地备份容灾,很多是需要通过租用公网的线路进行传输,而这些数据很多都是企业的机密,为了防止机密数据被黑客获取进而损害企业的利益,需要对GoldenGate的安全做一些增强。除了通过制定操作系统和数据库级别安全防范措施以外,还可以在GoldenGate层面来制定相应的安全策略。在本地可以通过加密trail文件和数据库文件来保护GoldenGate抽取到的数据。在网络传输过程中GoldenGate也可以加密传输的数据
2、,用户可以自己定义key来加密数据,使得黑客就算获取了数据也无法对其解密。下面来一一介绍着几种保护GoldenGate和数据安全的方法。10.1 加密trail文件加密extract trail文件非常的简单,只需要在Extract参数文件中加入ENCRYPTTRAIL参数。Extract进程就会对加入参数以后生成的trail文件进行加密。如果生产端trail文件加密,那么在容灾端参数文件中必须加入对应的DECRYPTTRAIL参数解密trail文件再入库。下面用logdump(查看GoldenGate trial文件的工具)对比一下加密之前和加密以后trail文件中内容的变化。没加密之前Ex
3、tract的内容:示例10-1:GGSCI (OE5) 55 view params extmaEXTRACT extmauserid GoldenGateorcl1, password GoldenGatesetenv (NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1)GETTRUNCATESREPORTCOUNT EVERY 1 MINUTES, RATEnumfiles 50000DISCARDFILE ./dirrpt/extma.dsc,APPEND,MEGABYTES 50WARNLONGTRANS 2h,CHECKINTERVAL 3mEXTTRAI
4、L ./dirdat/maDBOPTIONS ALLOWUNUSEDCOLUMNTRANLOGOPTIONS CONVERTUCS2CLOBSDYNAMICRESOLUTIONtable scott.* ;没加密之前Extract trail文件的内容:示例10-2:Logdump 55 open ./dirdat/ma000001Current LogTrail is /opt/GoldenGate/orcl1/dirdat/ma000001 Logdump 56 ghdr onLogdump 57 detail dataLogdump 58 ggstoken detailLogdump 5
5、9 pos 0Reading forward from RBA 0 Logdump 60 nLogdump 65 n_ Hdr-Ind : E (x45) Partition : . (x04) UndoFlag : . (x00) BeforeAfter : A (x41) RecLength : 23 (x0017) I/O Time : 2011/03/22 00:09:39.000.000 IOType : 5 (x05) OrigNode : 255 (xff) TransInd : . (x00) FormatType : R (x52) SyskeyLen : 0 (x00) I
6、ncomplete : . (x00) AuditRBA : 2 AuditPos : 29881732 Continued : N (x00) RecCount : 1 (x01) 2011/03/22 00:09:39.000.000 Insert Len 23 RBA 1391 Name: SCOTT.TEST After Image: Partition 4 G b 0000 0005 0000 0001 3100 0100 0a00 0000 066f 7261 | .1.ora 636c 65 | cle Column 0 (x0000), Len 5 (x0005) 0000 0
7、001 31 | .1 Column 1 (x0001), Len 10 (x000a) 0000 0006 6f72 6163 6c65 | .oracle -可以明 显的看到单词 GGS tokens: TokenID x52 R ORAROWID Info x00 Length 20 4141 414d 3058 4141 4541 4141 4147 5741 4141 0001 | AAAM0XAAEAAAAGWAAA. TokenID x4c L LOGCSN Info x00 Length 6 3438 3937 3831 | 489781 TokenID x36 6 TRANI
8、D Info x00 Length 8 392e 3130 2e32 3939 | 9.10.299 接下来再在参数文件中加入ENCRYPTTRAIL参数,使其对trail文件加密:示例10-3:GGSCI (OE5) 55 view params extma EXTRACT extmauserid GoldenGateorcl1, password GoldenGatesetenv (NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1)GETTRUNCATESREPORTCOUNT EVERY 1 MINUTES, RATEnumfiles 50000DISCARD
9、FILE ./dirrpt/extma.dsc,APPEND,MEGABYTES 50WARNLONGTRANS 2h,CHECKINTERVAL 3mENCRYPTTRAILEXTTRAIL ./dirdat/maDBOPTIONS ALLOWUNUSEDCOLUMNTRANLOGOPTIONS CONVERTUCS2CLOBSDYNAMICRESOLUTIONtable scott.* ;再查看加密后生成的Extract trail文件内容:示例10-4:Logdump 66 open ./dirdat/ma000002Current LogTrail is /opt/GoldenGate
10、/orcl1/dirdat/ma000002 Logdump 67 ghdr onLogdump 68 detail dataLogdump 69 ggstoken detail Logdump 74 n_ Hdr-Ind : E (x45) Partition : . (x04) UndoFlag : . (x00) BeforeAfter : A (x41) RecLength : 24 (x0018) I/O Time : 2011/03/22 00:35:13.000.000 IOType : 5 (x05) OrigNode : 255 (xff) TransInd : . (x01
11、) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 2 AuditPos : 31891236 Continued : N (x00) RecCount : 1 (x01) 2011/03/22 00:35:13.000.000 Insert Len 24 RBA 1212 Name: SCOTT.TEST After Image: Partition 4 G m 5e50 86ba af70 962b cc52 5bf9 a3f7 9760 7eda abd0 | P.p.+.R. 加密后看到的
12、是不可识别的密文 c092 111e | . Bad compressed block, found length of 34490 (x86ba), RBA 1212 GGS tokens: TokenID x52 R ORAROWID Info x00 Length 20 4141 414d 3058 4141 4541 4141 4147 5741 4130 0001 | AAAM0XAAEAAAAGWAA0. 加密后容灾端进程abend。下面是容灾端进程的参数和错误信息:示例10-5:GGSCI (OE5) 3 view params repmaREPLICAT repmaUSERID
13、 GoldenGateorcl2, PASSWORD GoldenGatesetenv (NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1)-REPORT AT 01:59REPORTCOUNT EVERY 30 MINUTES, RATEREPERROR DEFAULT, abendnumfiles 50000DBOPTIONS ALLOWUNUSEDCOLUMNMAXTRANSOPS 500000GROUPTRANSOPS 10000CHECKPOINTSECS 40-HANDLECOLLISIONSassumetargetdefsDISCARDFILE ./d
14、irrpt/repma.dsc, APPEND, MEGABYTES 50GETTRUNCATESALLOWNOOPUPDATES map scott.* , target scott.* ;-ERROR信息Source Context : SourceModule : ggstd.conv.endian SourceID : /mnt/ecloud/workspace/Build_FBO_OpenSys_r11.1. 1.0.11_001_41228/perforce/src/gglib/ggstd/ lecnv.c SourceFunction : convCompSQL SourceLi
15、ne : 531 ThreadBacktrace : 9 elements : /opt/GoldenGate/orcl2/replicat(CMessageContext: AddThreadContext()+0x26) 0x82021d6 : /opt/GoldenGate/orcl2/replicat(CMessageFactory: CreateMessage(CSourceContext*, unsigned int, .) +0x817) 0x81f8887 : /opt/GoldenGate/orcl2/replicat(_MSG_ERR_MAP_ COL_INDEX_INVA
16、LID(CSourceContext*, DBString const&, int, int, CMessageFactory:Message- Disposition)+0x8b) 0x81d6c4b : /opt/GoldenGate/orcl2/replicat 0x84aa2bc : /opt/GoldenGate/orcl2/replicat(ggConvRecLE(char*, file_def*, int, char, char)+0x4d) 0x84aa3bd : /opt/GoldenGate/orcl2/replicat 0x849dd2d : /opt/GoldenGat
17、e/orcl2/replicat(main+0x1f8b) 0x812670b : /lib/libc.so.6(_libc_start_main+0xdc) 0x68de8c : /opt/GoldenGate/orcl2/replicat(_gxx_ personality_v0+0x1b5) 0x810a1712011-03-22 00:36:37 ERROR OGG-01161 Bad column index (24144) specified for table SCOTT.TEST, max columns = 2.根据错误信息猜测是由于抽取进程加密了trail文件,Replic
18、at进程无法还原为真实的信息,导致了进程abend。下面在容灾端参数文件中加入DECRYPTTRAIL参数,让其对trail文件解密并查看进程的状态:示例10-6:GGSCI (OE5) 3 view params repmaREPLICAT repmaUSERID GoldenGateorcl2, PASSWORD GoldenGatesetenv (NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1)-REPORT AT 01:59REPORTCOUNT EVERY 30 MINUTES, RATEREPERROR DEFAULT, abendDECRYPTTRA
19、IL -加入解密参数numfiles 50000DBOPTIONS ALLOWUNUSEDCOLUMNMAXTRANSOPS 500000GROUPTRANSOPS 10000CHECKPOINTSECS 40-HANDLECOLLISIONSassumetargetdefsDISCARDFILE ./dirrpt/repma.dsc, APPEND, MEGABYTES 50GETTRUNCATESALLOWNOOPUPDATES map scott.* , target scott.* ;GGSCI (OE5) 14 info allProgram Status Group Lag Tim
20、e Since ChkptMANAGER REPLICAT RUNNING REPMA 00:00:00 00:00:03 加入解密参数后重新启动Replicat进程,Replicat进程显示running状态。10.2 加密数据库密码可以通过GoldenGate加密一些数据库口令,可以加密的数据库口令大致有下列3种。 GoldenGate Extract、Replicat进程及其他进程登录到数据库的密码。 ASM数据库、GoldenGate需要登录到ASM实例的密码。 GoldenGate开启DDL的情况下,如果生产端执行类似CREATE | ALTER USER IDENTIFIED BY
21、 的操作,容灾端有参数DDLOPTIONS DEFAULTUSERPASSWORD就会对密码进行加密,使其与生产端的不同。加密数据库密码的方法如下。进入GoldenGate GGSCI命令行,然后输入命令:示例10-7:ENCRYPT PASSWORD GoldenGate就会利用默认的key生成一个加密的密码,当然也可以自己指定key来生成加密密码,只需要键入命令:示例10-8:CRYPT PASSWORD ENCRYPTKEY 是用户自己生成的KEY的一个名字,这个名字和KEY将会保存在本地的ENCKEYS文件中。当然想使用这个属性,必须生成一个KEY,而且在本地创建一个ENCKEYS文件
22、,并且为这个KEY创建一个名字,那就是keyname。在用到encryptkey属性时候,有必要先介绍一下生成encryption keys的方法。用户自己定义KEY:首先要创建一个1到24个字符的keyname,其中不能包含空格和引用,keyvalues最大为128个字节,可以包含数字和字母或者是一个十六进制的字符串加上十六进制的标识符0x,例如:0x420E61BE7002D63560929CCA17A4E1FB。利用KEYGEN属性生成KEY:源端在GoldenGate的安装目录下,在shell下键入 命令:示例10-9:KEYGEN 可以得到多个KEY,其中:是生成的加密密码的长度,最
23、大为128字节。:控制要生成的KEY的数量。示例10-10:oracleOE5 orcl1$ ./keygen 128 40xA3116324F0C72B3BE328E728C6E757250x907B7678A7AB561CAF2532539A1DE72A0x7EE5894C5D8F817D7B227D7D6E5376300x6C4F9D201473AC5E481FC82742890536oracleOE5 orcl1$创建一个名为ENCKEYS的ASCII文件,为生成的每个KEY起一个名字并保存到这个文件中,以便于GoldenGate使用:示例10-11:# Encryption keys
24、# Key name Key valuesuperkey 0xA3116324F0C72B3BE328E728C6E75725 superkey1 0x907B7678A7AB561CAF2532539A1DE72Asuperkey2 0x7EE5894C5D8F817D7B227D7D6E537630superkey3 0x6C4F9D201473AC5E481FC82742890536然后,使用GoldenGate默认的KEY来加密数据库密码:示例10-12:oracleOE5 orcl1$ ./ggsciOracle GoldenGate Command Interpreter for
25、OracleVersion 11.1.1.0.11 Build 001Linux, x86, 32bit (optimized), Oracle 10 on Dec 6 2010 14:20:28Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.GGSCI (OE5) 1 ENCRYPT PASSWORD GoldenGateNo key specified, using default keyEncrypted password: AACAAAAAAAAAAAKAPATACEHBIGQGCF
26、ZCCDIGAEMCQFFBZHVC -这就是生成的加密密码GGSCI (OE5) 2复制生成的加密密码按下列方式粘贴到GoldenGate参数文件中。GoldenGate用户密码:示例10-13:USERID , PASSWORD , &ENCRYPTKEY DEFAULT | GGSCI (OE5) 5 edit params extmaEXTRACT extma-userid GoldenGateorcl1, password GoldenGateuserid GoldenGateorcl1 , password AACAAAAAAAAAAAKAPATACEHBIGQGCFZCCDIGA
27、- EMCQFFBZHVC , ENCRYPTKEY DEFAULTsetenv (NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1)GETTRUNCATESREPORTCOUNT EVERY 1 MINUTES, RATEnumfiles 50000DISCARDFILE ./dirrpt/extma.dsc,APPEND,MEGABYTES 50WARNLONGTRANS 2h,CHECKINTERVAL 3mEXTTRAIL ./dirdat/maDBOPTIONS ALLOWUNUSEDCOLUMNTRANLOGOPTIONS CONVERTUCS2CLOB
28、SDYNAMICRESOLUTIONtable scott.* ;这样在打开参数文件的时候,就看不到密码的明文了。黑客即使攻破了GoldenGate用户,看到这个配置文件,用里面这个加密的密码也无法登录到数据库,这样就起到了保护数据库数据的作用。ASM GoldenGate用户访问密码:示例10-14:TRANLOGOPTIONS ASMUSER SYS, ASMPASSWORD , ENCRYPTKEY DEFAULT | 读者可以自行去试验,这里就不演示了。CREATE/ALTER USER 密码:示例10-15:DDLOPTIONS DEFAULTUSERPASSWORD ,ENCRYP
29、TKEY DEFAULT | 对参数中名词的解释: 是数据库中用于GoldenGate进程的用户。对于ASM,用户必须具有SYS权限。 使用命令ENCRYPT PASSWORD得出的加密密码。 ENCRYPTKEY DEFAULT 利用GoldenGate默认的KEY生成的加密密码。 ENCRYPTKEY 如果在使用命令ENCRYPT PASSWORD的时候使用了ENCRYPTKEY 参数,那么在参数文件中也需要加入这个选项。告诉GoldenGate是使用用户自定义的KEY生成的加密密码。10.3 网络传输加密GoldenGate在传输数据的时候,默认是不加密的。可以在GoldenGate通过网络传输数据之前将数据加密,传送到目标端以后,在写入trail文件之前将数据解密。这样就有效地保护了数据在传输过程中的安全。加密网络传输