GoldenGate的安全配置

來源:互聯網
上載者:User

GoldenGate的安全配置

在實施GoldenGate的時候,安全這一項往往是被忽視的。但是作為一個完整啟動並執行GoldenGate系統,基本的安全設定還是很有必要的,比如口令的加密。GoldenGate的安全選項主要有以下5個方面:

?  口令加密(Password Encryption)

?  Trail檔案加密(Trail File Encryption)

?  網路傳輸加密(TCP/IP Encryption)

?  命令驗證(Command Authentication)

?  可信任連接(Trusted Connection)

這裡先來談談前3個安全選項。其餘兩項會在以後的專題中進行討論。

口令加密、Trail檔案加密以及網路傳輸加密都支援AES-128、AES-192和AES-256密碼編譯演算法,口令加密和網路傳輸加密還支援Blowfish密碼編譯演算法,Trail檔案加密還支援位元組替換加密。

口令加密

口令加密指的對資料庫帳號的口令進行加密,這樣資料庫帳號的口令在設定檔中就不會以明文的方式出現了,從而保證了帳號的安全。因為通常分配給GoldenGate使用的帳號都具有很大的許可權,因而對其進行保護也是很有必要的。在進行口令加密前,需要先產生密鑰檔案。實際上這一步不是必須的。可以使用GoldenGate預設的的密鑰來進行加密,但是使用預設的密鑰有很多限制:

1、只能使用Blowfish進行加密。

2、Trail檔案加密只能使用位元組替換。

3、網路傳輸加密不能使用

所以通常情況下還是需要自己產生密鑰檔案。產生密鑰檔案需要兩個步驟:

1、使用keygen工具產生密鑰。

2、在GoldenGate的安裝目錄建一個名為ENCKEYS的檔案,將上述產生的金鑰儲存區在檔案中。

具體操作如下:

# 產生密鑰,128表示的是產生的密鑰長度為128位,3表示產生3個密鑰

[ggate@ogg_s current]$ ./keygen 128 3

0x345CEB2DA213DC2F75B0514484FCAB42

 

0xD8A1B350AF392A75C52EE540B169B267

 

0x7CE77B73BD5F783A15AD783DDFD6B80C

 

# 將金鑰儲存區到檔案中,一行一個密鑰

[ggate@ogg_s current]$ cat ENCKEYS

## Key-name        Key-value

PASSWDKEY          0x345CEB2DA213DC2F75B0514484FCAB42

TRAILKEY          0xD8A1B350AF392A75C52EE540B169B267

TCPIPKEY          0x7CE77B73BD5F783A15AD783DDFD6B80C

配置好密鑰檔案後,我們就可以對資料庫帳號的口令進行加密了。

GGSCI (ogg_s) 1> ENCRYPT PASSWORD OGG123 ENCRYPTKEY PASSWDKEY

Encrypted password:  AADAAAAAAAAAAAGASBQGIAYGCFRCWELGFJMHBHHDOHWDWGRBBCKCYFSGGJTEJFFJUBQFKESGNAVBRDTF

Algorithm used:  AES128

操作是需要在GGSCI控制台下進行的,PASSWDKEY就是我們剛才配置的密鑰名。可以看到這裡使用的預設的密碼編譯演算法是AES-128。如果使用GoldenGate預設的密鑰時,密碼編譯演算法就會是Blowfish:

GGSCI (ogg_s) 2> ENCRYPT PASSWORD OGG123 ENCRYPTKEY DEFAULT

Using default key...

 

Encrypted password:  AACAAAAAAAAAAAGACARARDMENDJHIIFG

Algorithm used:  BLOWFISH

我們可以嘗試DBLOGIN來驗證加過密的口令是否能正常使用:

GGSCI (ogg_s) 3> DBLOGIN USERID OGG, PASSWORD AADAAAAAAAAAAAGASBQGIAYGCFRCWELGFJMHBHHDOHWDWGRBBCKCYFSGGJTEJFFJUBQFKESGNAVBRDTF, ENCRYPTKEY PASSWDKEY

Successfully logged into database.

OGG帳號成功串連資料庫了,說明加過密的口令是能正常工作。接下來就是要修改Extract或Replicat的設定檔了。修改也很簡單,就是將USERID這一行的內容修改下就可以了:

...

SETENV (Oracle_HOME=/u01/app/oracle/product/11.2.0/db_1)

SETENV (ORACLE_SID=ggtest)

--USERID OGG, PASSWORD OGG123

USERID OGG, PASSWORD AADAAAAAAAAAAAGASBQGIAYGCFRCWELGFJMHBHHDOHWDWGRBBCKCYFSGGJTEJFFJUBQFKESGNAVBRDTF, ENCRYPTKEY PASSWDKEY

EXTTRAIL /data/ggate/dirext/ggtest/ea

...

然後將Extract獲Replicat進程起來能正常工作就表示完成口令加密的配置了。

Trail檔案加密

    Trail檔案加密,就是將Extract進程解析出來的資料以加密的形式存放在trail檔案中(注意不是對整個trail檔案進行加密)。不加密的時候資料是以明文的形式存放在trail檔案中的(這不是廢話麼,呵呵)。開啟trail檔案就可以觀察到資料:

 

或者用logdump工具可以更方便的觀察到資料:

如果是加過密的,那資料就是一團亂碼了:

即使用logdump工具,也是只能觀察到亂碼的資料:

這樣資料的安全性就有了很好的保障。Trail檔案加密適合對資料安全性要求比較高的情形。Trail檔案加密的使用模式主要有以下兩種:

使用模式1:

使用模式2:

這兩者的區別在於,模式1的trail在Extract進程加密後,Pump進程不做任何處理,直接將加密過的資料傳送給目標,目標經過解密後將資料應用到目標庫。這種模式適合Pump進程只是做傳輸,而不需要進行如資料過濾、轉換等操作的情形。模式2的trail在Extract進程加密後,Pump進程先對trail進行解密,然後又重新加密,再將重新加密後的資料傳送給目標,目標經過解密後將資料應用到目標庫。這種模式適合Pump進程需要先對資料進行如過濾、轉換等操作的情形。

    配置Trail檔案加密也是非常容易,首先還是產生密鑰檔案(見口令加密一節中關於密鑰檔案的內容)。然後修改Extract和Replicat的配置:

# Extract進程設定檔中增加ENCRYPTTRAIL內容

...

SETENV (ORACLE_SID=ggtest)

USERID OGG, PASSWORD AADAAAAAAAAAAAGASBQGIAYGCFRCWELGFJMHBHHDOHWDWGRBBCKCYFSGGJTEJFFJUBQFKESGNAVBRDTF, ENCRYPTKEY PASSWDKEY

ENCRYPTTRAIL AES128 KEYNAME TRAILKEY

EXTTRAIL /data/ggate/dirext/jet2/ea

DISCARDFILE /u01/app/oracle/product/ggate/current/dirrpt/EJET2.dsc, APPEND, MEGABYTES 500

FETCHOPTIONS FETCHPKUPDATECOLS

...

需要注意的是ENCRYPTTRAIL的位置必須要在EXTTRAIL之前。如果把ENCRYPTTRAIL配置在EXTTRAIL之後,那麼Extract進程也能正常工作,只是沒起到加密作用。

# Replicat進程設定檔中增加DECRYPTTRAIL內容

...

SHOWSYNTAX

DYNSQL

DBOPTIONS DEFERREFCONST

DECRYPTTRAIL AES128 KEYNAME TRAILKEY

MAP JET2.*, TARGET JET2.*;

...

這裡需要將密鑰檔案傳送到目標庫上。這裡是模式1的使用情形。如果是模式2,還需要配置Pump進程:

...

DECRYPTTRAIL AES128 KEYNAME TRAILKEY

RMTHOST ogg_t, MGRPORT 7809

ENCRYPTTRAIL AES128 KEYNAME TRAILKEY

RMTTRAIL /data/ggate/dirrep/jet2/at

...

這裡DECRYPTTRAIL使用的密鑰必須是Extract使用的密鑰,即TRAILKEY,而再次加密時ENCRYPTTRAIL可以使用另一個密鑰,當然也可以使用同一個密鑰。但是需要注意的是如果使用了另一個密鑰,那麼目標的Replicat進程也要使用這個密鑰。

網路傳輸加密

網路傳輸加密,顧名思義就是Pump進程在傳送時將資料進行加密,目標端再接收資料進行解密。這個和Trail檔案加密模式2的區別是在網路傳輸加密方案中,trail是沒有進行過加密的,加密發生在傳輸過程中,MGR進程在接收到資料後對資料進行解密,然後寫入到trail中。所以目標的trail也是未加密的,Replicat進程不需要配置解密選項。當然我覺得將Trail檔案加密和網路傳輸加密結合在一起使用,應該也是可以的。網路傳輸加密適合跨機房的傳輸,比如做災備時,資料從機房A傳送到機房B,期間肯定得經過公網,那資料轉送這時候就是不安全的,通過該方案就能保證資料轉送的安全性,即使沒有使用專線的情況下,安全強度也還是可以接受的。

要配置網路傳輸加密非常簡單,只需要對Pump進程進行配置修改:

...

USERID OGG, PASSWORD AADAAAAAAAAAAAGASBQGIAYGCFRCWELGFJMHBHHDOHWDWGRBBCKCYFSGGJTEJFFJUBQFKESGNAVBRDTF, ENCRYPTKEY PASSWDKEY

RMTHOST ogg_t, MGRPORT 7809, ENCRYPT AES128 KEYNAME TCPIPKEY

RMTTRAIL /data/ggate/dirrep/jet1/at

...

如果是Passive Extract的需要使用RMTHOSTOPTIONS進行配置,這個在以後的專題中進行討論。這裡需要注意的是資料庫帳號的配置是不能少的,這是和通常的Pump配置不同的地方。不然Pump進程不能正常起來,會報類似以下的錯誤:

ERROR  OGG-01453  Oracle GoldenGate Capture for Oracle, pjet1.prm:  Database login information not specified in parameter file.

GoldenGate更新丟失問題 

GoldenGate單向表DML同步

Oracle GoldenGate 系列:Extract 進程的恢複原理

Oracle GoldenGate安裝配置

Oracle goldengate的OGG-01004 OGG-1296錯誤

Oracle GoldenGate快速入門教程:基本概念和配置

搭建一個Oracle到Oracle的GoldenGate雙向複製環境

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.