パスワードが必要なOracle DB更新スクリプトを実行しています。 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
release.sql:
spool release.log;
exit;
自動ログインウォレットを作成します。
次に、以下の構文を使用してデータベースに接続します。
sqlplus /@connect_string @release.sql
connect_strings
は同じである必要がありますconnect_string
ウォレットに格納されています。それ以外の場合、ウォレットの資格情報は使用されません。
次の形式で、必要なウォレットエントリの名前をsqlplusに渡します。
sqlplus /@entry-name
あなたの場合、これは
sqlplus /@SID
クライアントがターゲットデータベースに到達する方法を説明する同じ名前(ここでは「SID」)を使用したTNSエイリアスが必要です。
個人的には、ウォレットエントリに単にwhereよりも目的のある名前を付けることをお勧めします。 異なるの目的で2同じデータベースへの接続が必要な場合は、2つの個別のウォレットエントリを使用すると、それ自体が簡単になります。
mkstore -wrl . -createCredential SID_read_only user1 password1
mkstore -wrl . -createCredential SID_update user2 password2
データベースにアクセスするウォレットエントリが1つしかない場合は、1つまたは他のプロセスが実際に必要とするよりもはるかに多い(または少ない)特権で実行されている可能性があります。