Golden Gate 的 Trail File 在傳輸的過程當中可以使用 Compress 選項,目的是減少 Trail File 傳輸所消耗的網路頻寬。設定上只需要在 Pump 參數檔中的 RMTHOST 加上 compress 即可 :
EXTRACT PUMP1 SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="ORCL") SETENV (ORACLE_HOME="/user1/OraHome/db") RMTHOST 192.168.49.20 , MGRPORT 7809, COMPRESS, COMPRESSTHRESHOLD 500 RMTTRAIL ./dirdat/R1 PASSTHRU
TABLE HR.*; |
COMPRESSTHRESHOLD 表示壓縮的最小 Block Size ,單位為 bytes ,預設為 1000 。
OGG 的加密可以分為傳輸的加密 、 Trail File 加密 ,以及密碼加密三種。
在設定加密前必須先建立 Encryption Key ,在 Source 端的 OGG Home 目錄下執行 keygen 產生 Key :
$ ./keygen 128 3 0xA100BF1FDAFE440C0D410901341B7D58
0x28677E0C59BA41177B0F5B23B8C11335
0xAECD3D79D8753E22E9DDAC453C68AA11 |
keygen 128 3 表示產生三組 key ,長度為 128 bit ,最大可設定到 256 bit 。
產生出 Key 之後,於 OGG HOME 目錄下建立名為 ENCKEYS 的檔案,內容為上列三組 Key ,然後替每一組 Key 設定一個名稱,寫在前面 :
vi ENCKEYS -------------- key1 0xA100BF1FDAFE440C0D410901341B7D58 key2 0x28677E0C59BA41177B0F5B23B8C11335 key3 0xAECD3D79D8753E22E9DDAC453C68AA11 |
編輯完成後將 ENCKEYS 複製到 Target 端的 OGG Home 底下 :
$ scp ENCKEYS 192.168.49.20:$GG_HOME |
在 Source 端的 Pump 參數加入 ENCRYPT 設定進行傳輸的加密 :
EXTRACT PUMP1 SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="ORCL") SETENV (ORACLE_HOME="/user1/OraHome/db") RMTHOST 192.168.49.20 , MGRPORT 7809, ENCRYPT AES128,KEYNAME key2 RMTTRAIL ./dirdat/R1 PASSTHRU
TABLE HR.*; |
由於我們產生的 Key 是 128 bit 長度,所以 ENCRYPT 設定為 AES128 ,有三組 Key ,這邊使用的是第二組 (KEYNAME key2) 。
Source 的傳輸使用了加密,所以在 Target 端必須進行解密,在 Target 端設定一組 Static Collector 進行解密,在 Target 端的 OGG HOME 目錄底下執行 server 進行設定 :
$ ./server -p 2000 -ENCRYPT AES128 -KEYNAME key2 |
-p 使用的是 port 2000 ; -ENCRYPT 以 AES128 解密 ; -KEYNAME 使用第二組 Key key2 。
至此完成 Message Encryption 。
Trail File 的加密只需要在 Source 使用 EncryptTrail 參數以及在 Target 使用 DecryptTrail 解密即可。在此之前同樣的需要使用 keygen 產生 key ,然後將 ENCKEYS 複製到 Target 端,於 Extract 使用 EncryptTrail 參數如下 :
EXTRACT EXT1 SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="ORCL") SETENV (ORACLE_HOME="/user1/OraHome/db")
USERID ogg, PASSWORD ogg EncryptTrail AES128 ,keyname key1 EXTTRAIL ./dirdat/E1 DISCARDFILE ./dirrpt/ext1.dsc, PURGE, MEGABYTES 100
TABLE HR.*; |
EncryptTrail 以 AES128 加密,使用第一組 key key1 。
到了 Target 端,於 Replicate 參數檔裡面使用 DecryptTrail 進行解密 :
REPLICAT REP1 SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="ORCL") SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1") USERID ogg, PASSWORD ogg DecryptTrail AES128 ,keyname key1 ASSUMETARGETDEFS APPLYNOOPUPDATES DISCARDFILE ./dirrpt/REP1.dsc, MEGABYTES 10, PURGE
MAP HR.*, TARGET HR.*; |
同樣使用第一組 key 進行 AES128 解密。
至此完成 Trail File Encryption 。
到了 OGG 12c 之後,可以使用 Wallet 來管理 Key ,取代原本使用 ENCKEYS 這個檔案的方式,於 GGSCI 當中使用 create wallet 來建立 wallet :
預設建立 wallet 會於 OGG Home 目錄底下產生 dirwlt 目錄,再來就可以建立 Key :
GGSCI> open wallet GGSCI> add masterkey GGSCI> info masterkey all |
添加 masterkey 之後,於 dirwlt 底下會產生 cwallet.sso 檔案,然後同樣的把 dirwlt 複製到 Target 端,後續加密的動作與之前相同。
在未做任何密碼加密的情況下, OGG 參數檔設定的 OGG 使用者名稱與密碼都是明碼,由於 OGG 使用者的權限很大,萬一參數檔不小心外流,那麼對資料庫的安全將是一個很大的威脅,因此設定在參數檔裡面的密碼需要進行加密的動作。傳統密碼加密的做法仍然是使用 ENCKEYS 這個檔案來設定 key ,然後於 GGSCI 裡面產生加密過後的密碼,在此沿用上述 ENCKEYS 的設定,例如加密 welcome1 這個密碼 :
GGSCI> encrypt password welcome1 AES128 ENCRYPTKEY key1 Encrypted password: AACAAAAAAAAAAAIAJFGBNEYGTGSBSHVB |
然後將此加密過的密碼設定到參數檔裡面即可 :
EXTRACT EXT1 SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="ORCL") SETENV (ORACLE_HOME="/user1/OraHome/db")
USERID ogg, PASSWORD AACAAAAAAAAAAAIAJFGBNEYGTGSBSHVB, AES128, ENCRYPTKEY key1 EXTTRAIL ./dirdat/E1 DISCARDFILE ./dirrpt/ext1.dsc, PURGE, MEGABYTES 100
TABLE HR.*; |
在 OGG 12c 之後,使用的是 CredentialStore 來保護 OGG 的帳號與密碼, CredentialStore 的概念是為真正的帳號密碼建立一個別名 (alias) ,之後登入使用的是這個別名而不是真正的帳號密碼,而 CredentialStore 只能透過 GGSCI 來登入,即便知道 CredentialStore 的別名 (alias) 也不知真正登入到 DB 的帳號密碼,以此達到帳號安全性的目的。例如於 CredentialStore 新增一個別名 (alias) 為 ggalias :
GGSCI> create wallet GGSCI> add credentialstore GGSCI> alter credentialstore add user ggadmin password welcome1 alias ggalias GGSCI> info credentialstore |
CredentialStore 的 user 可以包含連線所需的 tnsnames ,例如 :
GGSCI> alter credentialstore add user ggadmin@orcl password welcome1 alias ggalias |
之後 GGSCI 使用的是 useridalias 來登入,而非之前的 userid ,由於帳號密碼已經設定於 alias ,所以 useridalias 只要輸入 alias 的名稱就可以登入 DB 了 :
GGSCI> dblogin useridalias ggalias |
同樣的於參數檔中使用的也是 useridalias :
EXTRACT EXT1 SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="ORCL") SETENV (ORACLE_HOME="/user1/OraHome/db")
USERIDALIAS ggalias EXTTRAIL ./dirdat/E1 DISCARDFILE ./dirrpt/ext1.dsc, PURGE, MEGABYTES 100
TABLE HR.*; |
透過 useridalias 來設定, OGG 的使用者名稱與密碼在參數檔中便不會被揭露,安全性比起單純的密碼加密又更高了。
沒有留言:
張貼留言