Docker
oracle 錢包使用者登錄被拒絕
跟隨關於預言機錢包的影片教程:https ://youtu.be/LLZzUNb9ALU
db 伺服器從 oracle 的官方 docker 容器執行。
我所做的步驟如下:
- 在伺服器 shell 上,以 sysdba 身份執行 sql plus:
$ sqlplus / as sysdba
- 創建了一個使用者:
SQL> alter session set "_ORACLE_SCRIPT"=true; SQL> CREATE USER fred identified by flintstone; SQL> GRANT CONNECT, RESOURCE, DBA to fred;
- 測試登錄:
$ sqlplus fred/flintstone SQL> show user; User is "fred"
- 在預設位置創建了一個錢包:
$ORACLE_BASE/admin/$ORACLE_SID/wallet
$ orapki wallet create -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -auto_login -pwd MyWalletPass
- 為使用者創建了一個錢包配置文件
fred
:$ mkstore -wrl $ORACLE_BASE/admin/$ORACLE_SID/wallet -createCredential $ORACLE_SID fred flintstone
- 嘗試登錄sqlplus:
$ sqlplus /@$ORACLE_SID
這失敗了。得到錯誤
ORA-01017: invalid username/password; logon denied
無法理解出了什麼問題。最終目標是將此錢包用於具有外部身份驗證 (node-oracledb) 的 nodejs 應用程序。但我認為如果我可以修復第 6 步,我應該可以從 nodejs 使用。
第一部分,我在
sqlnet.ora
文件中明確提到了錢包位置,還包括以下行:SQLNET.WALLET_OVERRIDE=TRUE
. 還驗證了正確的 tns 條目tnsnames.ora
。(這在容器啟動期間已經處理好了,所以我不需要做任何事情)。對於第二部分,我必須使用相同
sqlnet.ora
的參數,但WALLET_LOCATION
參數已更新為客戶端電腦上錢封包件夾的位置。對於客戶端程序,我必須設置TNS_ADMIN
環境變數;我必須將它指向前一個文件所在的文件夾。另外添加了一個tnsnames.ora
文件,並添加了一個 tns 名稱(類似於 db 伺服器上的 oracle 服務名稱)。注意:在客戶端機器上,我們必須注意文件中的
sqlnet.ora
語法tnsnames.ora
。不同的客戶端有不同的連接方式。我剛剛提到了用作orcaledb
oracle 客戶端的 nodejs 程序的情況。這些特定類型的客戶端使用環境變數TNS_ADMIN
。