You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用node-oracledb Thin模式连Oracle遇NJS-116错误求助

解决NJS-116: password verifier type 0x939 not supported in node-oracledb Thin mode错误

这个错误源于你的Oracle数据库使用了12c+引入的SHA-256密码验证器(对应0x939类型),而当前使用的node-oracledb Thin模式版本不支持该验证方式。以下是几种可行的解决办法:

1. 升级node-oracledb到最新版本

node-oracledb从6.0版本开始,Thin模式已支持12c+的SHA-256密码验证。执行以下命令升级依赖:

npm install oracledb@latest

升级后重新测试数据库连接,多数情况下该错误会直接消失。

2. 调整Oracle数据库的SQLNET配置

若升级包后问题仍存在,可能是数据库端的登录版本限制导致的。需修改数据库服务器上的SQLNET.ORA文件(通常位于$ORACLE_HOME/network/admin目录):

  • 添加或修改配置项:
    SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
    
  • 重启Oracle监听服务和数据库实例,使配置生效。
    该配置会强制数据库使用12c及以上的验证协议,与新版node-oracledb Thin模式兼容。

3. 切换到node-oracledb Thick模式

若暂时无法升级包或修改数据库配置,可切换到依赖Oracle Instant Client的Thick模式:

  1. 下载并安装对应版本的Oracle Instant Client(推荐19c或21c版本,兼容多数Oracle数据库)
  2. 在代码中初始化Thick模式后再建立连接:
const oracledb = require('oracledb');

async function connectOracle() {
  try {
    // 初始化Thick模式,指定Instant Client安装路径
    await oracledb.initOracleClient({ 
      libDir: '/opt/oracle/instantclient_19_18' // Windows路径示例:'C:\\instantclient_19_18'
    });

    // 建立数据库连接
    const conn = await oracledb.getConnection({
      user: '你的数据库用户名',
      password: '你的数据库密码',
      connectString: '你的连接字符串(如localhost:1521/ORCL)'
    });

    // 执行查询示例
    const result = await conn.execute('SELECT * FROM YOUR_TABLE WHERE ID = :id', [1]);
    console.log(result.rows);

    await conn.close();
  } catch (err) {
    console.error('数据库操作错误:', err);
  }
}

connectOracle();

4. 重置数据库用户密码(需DBA权限)

若拥有数据库DBA权限,可重置用户密码以生成兼容的验证器:

ALTER USER 你的用户名 IDENTIFIED BY 新密码;

执行该语句后,数据库会重新生成用户密码验证信息,通常可解决验证器不兼容问题。

内容的提问来源于stack exchange,提问作者Vaibhav Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:47:46