使用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模式:
- 下载并安装对应版本的Oracle Instant Client(推荐19c或21c版本,兼容多数Oracle数据库)
- 在代码中初始化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
相关产品推荐
相关产品推荐

