How to use Oracle Wallet
Wallet可以將其當作一種免密連接的方式,在DB端配置好wallet,然後將驗證文件拷貝到客戶端,客戶端在使用這個連接的時候就可以不用密碼登陸了。
簡單配置:
1,創建一個存儲wallet的位置:mkdir -p /tmp/wallet/orcl
2,在tnsnames.ora裏面配置你的連接串:
ORCL_WALLET=
(DESCRIPTION=
(ADDRESS=((PROTOCOL=tcp)(HOST=test1.com)(PORT=1630)))
(CONNECT_DATA= (SERVICE_NAME=ORCL)))
3,使用mkstore創建wallet: mkstore -wrl <wallet_location> -create
mkstore -wrl /tmp/wallet -create
這一步會生成 cwallet.sso
和 ewallet.p12, cwallet.sso是auto login wallet, 用於免去交互式密碼登錄,ewallet.p12則是PKCS #12 wallet,用來存儲傳輸個人登錄認證信息。
4,往wallet裏面添加認證信息: mkstore -wrl <wallet_location> -createCredential <db_connect_string> <username> <password>
例子,比如說配置賬號為scott,密碼為tiger的免密登錄:
mkstore -wrl /tmp/wallet/orcl -createCredential ORCL_WALLET scott tiger
小tips:
a,推薦使用tnsnames.ora配置連接串的方式
b,如果你使用的不是tnsnames.ora來配置<db_connect_string>的話,而是使用 (DESCRIPTION= (ADDRESS=((PROTOCOL=tcp)(HOST=test1.com)(PORT=1630))) (CONNECT_DATA= (SERVICE_NAME=ORCL)))這種形式,你要註意使用雙引號將其包含起來,因為任何特殊字符都會導致失敗
c,你可以在客戶端保存多個DB多個wallet,但是在服務端,你不能往一個wallet裏面添加多個登錄認證信息,比如說,你創建了一個wallet,然後往這個wallet添加了用戶scott,那麽就算你是同一個DB的,你也不能再往這個wallet裏面添加其他用戶了。多個schema要配置多個wallet。
測試:
1,在sqlnet.ora裏面配置
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /tmp/wallet/orcl)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
Note: 當一個應用使用了SSL加密的話,SQLNET.WALLET_OVERRIDE設置為true,它會在SSL認證後,使用wallet中存儲的用戶密碼認證DB
2,在tnsnames.ora裏面配置,註意alias必須跟你之前創建wallet的時候一樣,不然會認證失敗
ORCL_WALLET=
(DESCRIPTION=
(ADDRESS=((PROTOCOL=tcp)(HOST=test1.com)(PORT=1630)))
(CONNECT_DATA= (SERVICE_NAME=ORCL)))
3,測試,連接串也是使用相同的alias
sqlplus /@ORCL_WALLET
其他的一些管理:
1,用戶更新密碼後,記得更新wallet
mkstore -wrl <wallet_location> -modifyCredential <dbase_alias> <username> <password>
2,DB信息更新後,記得更新tnsnames.ora
3,刪除wallet裏面的認證信息
mkstore -wrl <wallet_location> -deleteCredential <db_alias>
How to use Oracle Wallet