跟随关于预言机钱包的视频教程: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
。