我正在运行需要密码的 Oracle 数据库更新脚本。我安装了 Oracle 钱包。如何将 Oracle 钱包传递给 sh 脚本,以便在运行脚本时无需输入密码?
我有我的 sqlnet.ora
sqlnet.expire_time=60
sqlnet.inbound_connect_timeout=300
sqlnet.allowed_logon_version_server=10
sqlnet.allowed_logon_version_client=10
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /oracle/app/oracle/product/base19/19/network/admin/wallet)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = TRUE
凭据已正确安装:
$ mkstore -wrl "/oracle/app/oracle/product/base19/19/network/admin/wallet" -listCredential
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
List credential (index: connect_string username)
1: SID USER PASSWORD
我正在运行脚本 update_sql.sh:
#!/bin/bash
sqlplus cobrball @release.sql
发布.sql:
spool release.log;
exit;
创建一个自动登录钱包。
创建自动登录钱包
然后使用以下语法连接到数据库:
sqlplus /@connect_string @release.sql
connect_strings
必须与connect_string
存储在钱包中的相同。否则不会使用钱包中的凭证。以这种形式将所需钱包条目的名称传递给 sqlplus:
在你的情况下,我认为这将是
请注意,您应该有一个同名的 TNS 别名(此处为“SID”),它描述了客户端应如何访问目标数据库。
就个人而言,我建议用比它们要去的地方更有目的性的东西来命名你的钱包条目。如果您发现自己需要两个连接到同一个数据库以用于不同的目的,那么拥有两个单独的钱包条目本身就很简单。
如果您只有一个进入数据库的钱包条目,那么这可能意味着一个或其他进程运行的权限比实际需要的权限多得多(或少得多)。