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>