1) Wallet作用
從Oracle 10g R2開始, 通過使用Oracle Wallet達到任意使用者不使用密碼登入資料庫(非作業系統認證方式), 這對在shell中要使用使用者密碼登入資料庫進行操作的指令碼來說是非常有用的, 可以不暴露使用者密碼. 比如在Oracle用戶端通過mkstore命令設定Wallet認證資訊, 然後通過"sqlplus /@connect_string"方式就可以直接連接資料庫.
本例是讓u_test使用者無需使用密碼登入系統, mkstore用法如下:
$ $ORACLE_HOME/bin/mkstore
mkstore [-wrl wrl] [-create] [-createSSO] [-delete] [-deleteSSO] [-list] [-createEntry alias secret] [-viewEntry alias] [-modifyEntry alias secret] [-deleteEntry alias] [-help]
2) 建立Wallet, 存放於某目錄下
$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet -create
Enter password:<輸入錢包密碼>
Enter password again:<確認錢包密碼>
$ ll $ORACLE_HOME/network/admin/wallet
total 16
-rw------- 1 oracle oinstall 7940 Sep 24 13:46 cwallet.sso
-rw------- 1 oracle oinstall 7912 Sep 24 13:46 ewallet.p12
3) 建立網路連接串, 注意每個網路連接串對應一個資料庫使用者
$ vi $ORACLE_HOME/network/admin/tnsnames.ora
db_utest =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DataGuard)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MNTR.LK)
)
)
4) 加入使用者認證資訊到Wallet
其中db_utest是前面設定的網路串連串, "iamENCY3_"是使用者u_test的密碼.
$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet -createCredential db_utest u_test "iamENCY3_"
Enter wallet password:<輸入錢包密碼>
Create credential oracle.security.client.connect_string1
5) 確認使用者認證資訊已經加入到Wallet
$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet -listCredential
Enter wallet password:<輸入錢包密碼>
List credential (index: connect_string username)
1: db_utest u_test
6) 加入Wallet位置資訊到sqlnet.ora
$ vi $ORACLE_HOME/network/admin/sqlnet.ora
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/product/10.2.0/db_1/network/admin/wallet)))
SQLNET.WALLET_OVERRIDE=TRUE
7) 登入OWM(圖形介面), 確認是否自動登入(預設是), 本步只是確認一下可忽略
$ $ORACLE_HOME/bin/owm &
先open目錄/u01/app/oracle/product/10.2.0/db_1/network/admin/wallet下的Wallet, 然後從功能表列裡查看"Auto Login"是否已經選中.
8) 登入測試
$ sqlplus /@db_utest
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Sep 24 14:05:17 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show user;
USER is "U_TEST"
登入成功, 設定完畢!以後就可以在shell裡直接使用"sqlplus /@db_utest"登入資料庫操作了, 無需設定密碼.
9) 修改使用者密碼測試
SQL> alter user u_test identified by "iamENCY3_2";
SQL> exit
$ sqlplus /@db_utest
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Sep 24 14:07:05 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
10) 如果修改了使用者密碼, 則需要重新修改認證資訊
$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet/ -modifyCredential db_utest u_test "iamENCY3_2"
Enter wallet password:<輸入錢包密碼>
Modify credential
Modify 1
11) 刪除Wallet認證的方法
$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet/ -deleteCredential db_utest
Enter wallet password:<輸入錢包密碼>
Delete credential
Delete 1