二、加密数据库密码

可以通过GoldenGate加密一些数据库口令,可以加密的数据库口令大致有下列3种。

GoldenGate Extract、Replicat进程及其他进程登录到数据库的密码。

ASM数据库、GoldenGate需要登录到ASM实例的密码。

GoldenGate开启DDL的情况下,如果生产端执行类似CREATE | ALTER} USER <name> IDENTIFIED BY <password> 的操作,容灾端有参数DDLOPTIONS DEFAULTUSERPASSWORD就会对密码进行加密,使其与生产端的不同。

加密数据库密码的方法如下。


进入GoldenGate GGSCI命令行,然后输入命令:

示例7:

ENCRYPT PASSWORD <password>

GoldenGate就会利用默认的key生成一个加密的密码,当然也可以自己指定key来生成加密密码,只需要键入命令:

示例8:

CRYPT PASSWORD <password> ENCRYPTKEY <keyname>

<keyname>是用户自己生成的KEY的一个名字,这个名字和KEY将会保存在本地的ENCKEYS文件中。当然想使用这个属性,必须生成一个KEY,而且在本地创建一个ENCKEYS文件,并且为这个KEY创建一个名字,那就是keyname。

在用到encryptkey属性时候,有必要先介绍一下生成encryption keys的方法。

用户自己定义KEY:首先要创建一个1到24个字符的keyname,其中不能包含空格和引用,keyvalues最大为128个字节,可以包含数字和字母或者是一个十六进制的字符串加上十六进制的标识符0x,例如:0x420E61BE7002D63560929CCA17A4E1FB。


利用KEYGEN属性生成KEY:源端在GoldenGate的安装目录下,在shell下键入         命令:

示例9:

KEYGEN <key length> <n>

可以得到多个KEY,其中:

<key length>:是生成的加密密码的长度,最大为128字节。

<n>:控制要生成的KEY的数量。

示例10:

[oracle@OE5 orcl1]$ ./keygen 128 4

0xA3116324F0C72B3BE328E728C6E75725

0x907B7678A7AB561CAF2532539A1DE72A

0x7EE5894C5D8F817D7B227D7D6E537630

0x6C4F9D201473AC5E481FC82742890536

[oracle@OE5 orcl1]$


创建一个名为ENCKEYS的ASCII文件,为生成的每个KEY起一个名字并保存到这个文件中,以便于GoldenGate使用:

示例11:

## Encryption keys

## Key name        Key value

superkey           0xA3116324F0C72B3BE328E728C6E75725

superkey1          0x907B7678A7AB561CAF2532539A1DE72A

superkey2          0x7EE5894C5D8F817D7B227D7D6E537630

superkey3          0x6C4F9D201473AC5E481FC82742890536


然后,使用GoldenGate默认的KEY来加密数据库密码:

示例12:

[oracle@OE5 orcl1]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle

Version 11.1.1.0.11 Build 001

Linux, x86, 32bit (optimized), Oracle 10 on Dec  6 2010 14:20:28

Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.

GGSCI (OE5) 1> ENCRYPT PASSWORD GoldenGate

No key specified, using default key…

Encrypted password:  AACAAAAAAAAAAAKAPATACEHBIGQGCFZCCDIGAEMCQFFBZHVC

--这就是生成的加密密码

GGSCI (OE5) 2>

复制生成的加密密码按下列方式粘贴到GoldenGate参数文件中。


GoldenGate用户密码:

示例13:

USERID <user>, PASSWORD <encrypted_password>, &ENCRYPTKEY {DEFAULT | <keyname>}

GGSCI (OE5) 5> edit params extma

EXTRACT extma

--userid GoldenGate@orcl1, password GoldenGate

userid GoldenGate@orcl1 , password AACAAAAAAAAAAAKAPATACEHBIGQGCFZCCDIGA-EMCQFFBZHVC , ENCRYPTKEY DEFAULT

setenv (NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1")

GETTRUNCATES

REPORTCOUNT EVERY 1 MINUTES, RATE

numfiles 50000

DISCARDFILE ./dirrpt/extma.dsc,APPEND,MEGABYTES 50

WARNLONGTRANS 2h,CHECKINTERVAL 3m

EXTTRAIL ./dirdat/ma

DBOPTIONS ALLOWUNUSEDCOLUMN

TRANLOGOPTIONS  CONVERTUCS2CLOBS

DYNAMICRESOLUTION

table scott.* ;

这样在打开参数文件的时候,就看不到密码的明文了。***即使攻破了GoldenGate用户,看到这个配置文件,用里面这个加密的密码也无法登录到数据库,这样就起到了保护数据库数据的作用。


ASM GoldenGate用户访问密码:

示例14:

TRANLOGOPTIONS ASMUSER SYS@<ASM_instance_name>, ASMPASSWORD <encrypted_password>, ENCRYPTKEY {DEFAULT | <keyname>}

读者可以自行去试验,这里就不演示了。


CREATE/ALTER USER 密码:

示例15:

DDLOPTIONS DEFAULTUSERPASSWORD <encrypted_password>,ENCRYPTKEY {DEFAULT | <keyname>}


对参数中名词的解释:

<user id>  是数据库中用于GoldenGate进程的用户。对于ASM,用户必须具有SYS权限。

<encrypted_password>  使用命令ENCRYPT PASSWORD得出的加密密码。

ENCRYPTKEY DEFAULT  利用GoldenGate默认的KEY生成的加密密码。

ENCRYPTKEY <keyname>  如果在使用命令ENCRYPT PASSWORD的时候使用了ENCRYPTKEY <keyname>参数,那么在参数文件中也需要加入这个选项。告诉GoldenGate是使用用户自定义的KEY生成的加密密码。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html