web-dev-qa-db-ja.com

Oracle Wallet authをshスクリプトに渡す方法は?

パスワードが必要な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;
1
Stepan

自動ログインウォレットを作成します。

自動ログインウォレットの作成

次に、以下の構文を使用してデータベースに接続します。

sqlplus /@connect_string @release.sql

connect_stringsは同じである必要がありますconnect_stringウォレットに格納されています。それ以外の場合、ウォレットの資格情報は使用されません。

1
Balazs Papp

次の形式で、必要なウォレットエントリの名前を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つまたは他のプロセスが実際に必要とするよりもはるかに多い(または少ない)特権で実行されている可能性があります。

1
Phill W.