Oracle

如何將 Oracle Wallet 身份驗證傳遞給 sh 腳本?

  • February 27, 2020

我正在執行需要密碼的 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:

sqlplus /@entry-name 

在你的情況下,我認為這將是

sqlplus /@SID

請注意,您應該有一個同名的 TNS 別名(此處為“SID”),它描述了客戶端應如何訪問目標數據庫。

就個人而言,我建議用比它們要去的地方更有目的性的東西來命名你的錢包條目。如果您發現自己需要兩個連接到同一個數據庫以用於不同的目的,那麼擁有兩個單獨的錢包條目本身就很簡單。

mkstore -wrl . -createCredential SID_read_only user1 password1 
mkstore -wrl . -createCredential SID_update    user2 password2 

如果您只有一個進入數據庫的錢包條目,那麼這可能意味著一個或其他程序以比實際需要的更多(或更少)的權限執行。

引用自:https://dba.stackexchange.com/questions/260704