Docker

oracle 錢包使用者登錄被拒絕

  • January 11, 2021

跟隨關於預言機錢包的影片教程:https ://youtu.be/LLZzUNb9ALU

db 伺服器從 oracle 的官方 docker 容器執行。

我所做的步驟如下:

  1. 在伺服器 shell 上,以 sysdba 身份執行 sql plus:
$ sqlplus / as sysdba
  1. 創建了一個使用者:
SQL> alter session set "_ORACLE_SCRIPT"=true;
SQL> CREATE USER fred identified by flintstone;
SQL> GRANT CONNECT, RESOURCE, DBA to fred;
  1. 測試登錄:
$ sqlplus fred/flintstone

SQL> show user;
User is "fred"
  1. 在預設位置創建了一個錢包:$ORACLE_BASE/admin/$ORACLE_SID/wallet
$ orapki wallet create -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -auto_login -pwd MyWalletPass
  1. 為使用者創建了一個錢包配置文件fred
$ mkstore -wrl $ORACLE_BASE/admin/$ORACLE_SID/wallet -createCredential $ORACLE_SID fred flintstone
  1. 嘗試登錄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。不同的客戶端有不同的連接方式。我剛剛提到了用作orcaledboracle 客戶端的 nodejs 程序的情況。這些特定類型的客戶端使用環境變數TNS_ADMIN

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