nodejs oracledb externalAuth(使用oracle钱包)
Posted
技术标签:
【中文标题】nodejs oracledb externalAuth(使用oracle钱包)【英文标题】:nodejs oracledb externalAuth (using oracle wallet) 【发布时间】:2021-01-07 13:45:42 【问题描述】:在这个示例 nodejs 应用程序中,我尝试使用钱包连接到 oracle 数据库。钱包是在服务器中创建的,钱包目录的内容被压缩并解压缩到我项目的根文件夹中(在一个名为 wallet
的文件夹中)。
在同一文件夹中进一步包含sqlnet.ora
文件。其内容为:
WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=D:\code\js\myoracledb-app\wallet)
)
)
主程序 (index.js
) 非常简单:
const oracledb = require('oracledb');
const path = require('path');
const configDir = path.join(__dirname, 'wallet');
// oracledb.initOracleClient( configDir: configPath );
// oracledb.initOracleClient();
const poolOptions =
externalAuth: true,
connectionString: '8.83.87.12:1522/ORCLCDB',
configDir
;
oracledb.createPool(poolOptions, function(err, pool)
if(err)
console.error(err);
process.exit(1);
else
pool.getConnection(function(err, conn)
if(err)
console.error(err);
process.exit(2);
else
conn.execute('select sysdate from dual', [], , function(err, result)
if(err)
console.error(err);
process.exit(3);
else
conn.release(function()
console.log('Result:', JSON.stringify(result));
process.exit(0);
);
);
);
);
我使用oracledb
作为客户端连接到我的远程数据库。我在pool.getConnection()
的回调中收到错误消息。这由返回的错误代码验证。
到控制台的错误输出是:
[Error: ORA-01017: invalid username/password; logon denied]
errorNum: 1017,
offset: 0
我尝试了各种尝试初始化 oracledb 客户端 (oracledb.initOraClient()
),但结果是一样的。我在这里做错了什么?
Ps:如果对钱包的创建方式感兴趣,请阅读 this 帖子及其 cmets。
【问题讨论】:
钱包是否包含数据库用户名和密码?并非所有人都这样做。例如,Oracle 云自治数据库的钱包就没有。见blogs.oracle.com/opal/… 首先让它与 SQL*Plus 一起工作,然后它才能与 node-oracledb 一起工作——它们都使用相同的内部库 API。这将使更多的人帮助您,您也可以使用 Oracle 支持。 【参考方案1】:我将sqlnet.ora
调整如下:
WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=D:\code\js\myoracledb-app\wallet)
)
)
SQLNET.WALLET_OVERRIDE=TRUE
接下来,池选项定义如下:
const poolOptions =
externalAuth: true,
connectionString: 'ORCLCDB'
;
ORCLCDB
服务名称在 tnsnames.ora
中定义。
ORCLCDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <host_ip_or_name>)(PORT = <server_port>))
)
(CONNECT_DATA =
(SERVICE_NAME =ORCLCDB)
)
)
sqlnet.ora
和 tnsnames.ora
文件都放在了钱包文件夹中。将TNS_ADMIN
环境变量设置为钱包文件夹。以下是如何在 powershell 中执行此操作的示例:
PS1 > $env:TNS_ADMIN=$(join-path $pwd wallet)
【讨论】:
以上是关于nodejs oracledb externalAuth(使用oracle钱包)的主要内容,如果未能解决你的问题,请参考以下文章
Linux 下 nodejs 使用官方oracledb库连接数据库 教程