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

如何通过Cloud Wallet将Sequelize连接至Oracle数据库?

Node.js + Sequelize 连接带Cloud Wallet的Oracle数据库解决方案

问题说明

已通过SQLDeveloper使用Cloud Wallet文件成功连接Oracle数据库,但使用Sequelize连接时返回错误:

"original: Error: NJS-500: 与Oracle数据库的连接已中断"

错误原因

仅传递CA证书无法满足Cloud Wallet的身份验证要求,Oracle Cloud Wallet需要完整的Wallet文件(cwallet.sso或ewallet.p12)及配套配置文件才能建立安全连接。

解决方案

1. 确保依赖安装

先确认已安装所需依赖包:

npm install sequelize oracledb

2. 方式一:通过TNS名称连接(推荐)

利用已有的tnsnames.ora和Wallet文件,直接指定TNS别名完成连接:

const Sequelize = require('sequelize');

// 配置Wallet文件所在目录的环境变量(也可在系统环境变量中设置)
process.env.TNS_ADMIN = __dirname + '/../../'; // 替换为你的Wallet文件目录
process.env.ORACLE_WALLET = __dirname + '/../../';

const _sequelize = new Sequelize(
  null, 
  config.database.username, 
  config.database.password, 
  {
    dialect: 'oracle',
    logging: false,
    dialectOptions: {
      connectString: config.database.tnsAlias, // tnsnames.ora中对应的服务别名
      walletLocation: __dirname + '/../../' // Wallet文件所在目录
    }
  }
);

_sequelize.authenticate()
  .then(() => console.log('Connection to DB : [OK]'))
  .catch(error => {
    console.error('Connection to DB : [KO]');
    console.error(error);
  });

module.exports = _sequelize;

3. 方式二:直接配置连接参数

若不想使用TNS名称,可手动配置连接参数并指定Wallet:

const Sequelize = require('sequelize');

const _sequelize = new Sequelize(
  config.database.servicename, 
  config.database.username, 
  config.database.password, 
  {
    host: config.database.address,
    port: config.database.port,
    dialect: 'oracle',
    logging: false,
    dialectOptions: {
      ssl: true,
      walletLocation: __dirname + '/../../', // Wallet文件所在目录
      // 若Wallet设置了密码,需添加以下参数
      // walletPassword: config.database.walletPassword
    }
  }
);

_sequelize.authenticate()
  .then(() => console.log('Connection to DB : [OK]'))
  .catch(error => {
    console.error('Connection to DB : [KO]');
    console.error(error);
  });

module.exports = _sequelize;

4. 注意事项

  • 确保所有Wallet相关文件(cwallet.sso、ewallet.p12、sqlnet.ora、tnsnames.ora)都放在指定目录下,且Node.js进程拥有读取权限。
  • sqlnet.ora中需包含Wallet配置,默认可添加以下内容(若原有文件无此配置):
    WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY = ./)))
    SQLNET.WALLET_OVERRIDE = TRUE
    SSL_CLIENT_AUTHENTICATION = FALSE
    
  • 如果Wallet设置了密码,必须在dialectOptions中添加walletPassword参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:40:23