Oracle
如何將 Oracle Wallet 身份驗證傳遞給 sh 腳本?
我正在執行需要密碼的 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
如果您只有一個進入數據庫的錢包條目,那麼這可能意味著一個或其他程序以比實際需要的更多(或更少)的權限執行。