node.js - nodejs oracledb externalAuth(使用oracle钱包)
问题描述
在这个示例 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:如果对钱包的创建方式感兴趣,请阅读这篇文章及其评论。
解决方案
我调整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)
推荐阅读
- machine-learning - 决策树中的目标平均值是使用均值还是中值计算的?
- ios - 你如何在swiftUI中禁用navigationBaritems
- python - 使用 tkinter 按钮从 MySQL 获取数据被重复
- java - 从 JDBC 读取枚举时遇到问题
- keras - 正则化器导致“ValueError:Shapes must be equal rank”
- c++ - 三角形未正确渲染
- java - 如何设计swing ui?
- reactjs - 如何在 React 应用程序中正确导入组件?
- c# - C# 十六进制浮点常量
- apple-silicon - Apple Silicon / M1 的 macOS 驱动程序套件系统扩展应该是 arm64 还是 arm64e?