Carbon创建Oracle数据源URL配置及ORA-28040认证错误排查求助
解决WSO2 EI连接Oracle 12c时的ORA-28040认证错误
这个ORA-28040错误我之前帮团队排查过好几次,核心问题是Oracle 12c的默认认证协议和你当前的JDBC驱动、数据库配置不兼容,咱们一步步来搞定:
1. 彻底清理并匹配JDBC驱动版本
Oracle 12c对应的JDBC驱动得用ojdbc7或ojdbc8,ojdbc6是给11g的,ojdbc14更是老旧版本,完全不兼容12c的新认证规则。你之前替换驱动时可能没清理旧的,导致WSO2还是加载了旧驱动:
- 删掉
D:\WSO2\EnterpriseIntegrator\6.5.0\lib目录下所有旧的Oracle驱动(ojdbc6、ojdbc14这些全部移除) - 下载对应Oracle 12c版本的ojdbc7/ojdbc8(比如Oracle 12.2.x就用ojdbc8),放到lib目录
- 重启WSO2 EI服务器,确保新驱动被加载
2. 修改Oracle数据库的SQLNET.ORA配置
Oracle 12c默认启用了更严格的认证协议,旧驱动不支持,需要在数据库端调整配置:
- 找到Oracle安装目录下的
NETWORK\ADMIN\sqlnet.ora文件(比如路径是D:\app\你的用户名\product\12.2.0\dbhome_1\NETWORK\ADMIN) - 添加或修改以下参数:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 - 保存后,重启Oracle监听服务(在Windows服务里找
OracleOraDB12Home1TNSListener)和数据库实例,让配置生效
3. 检查JDBC URL格式是否正确
你当前用的URL是jdbc:oracle:thin:@localhost:1522/ORADB12c,这里要区分是服务名还是SID:
- 如果ORADB12c是SID,URL格式应该是
jdbc:oracle:thin:@localhost:1522:ORADB12c(用冒号分隔端口和SID) - 如果是服务名,当前格式没问题,但可以用SQL语句确认服务名:
SELECT value FROM v$parameter WHERE name='service_names';
4. 重置数据库用户的认证方式
有时候用户的认证哈希方式是SHA2,旧驱动无法识别,需要重置:
- 登录Oracle数据库,执行以下SQL查询用户认证类型:
SELECT username, authentication_type FROM dba_users WHERE username='WSO2_TUT'; - 如果结果是
PASSWORD_HASH或SHA2,执行以下语句重置用户密码(会自动切换到兼容旧驱动的认证方式):ALTER USER WSO2_TUT IDENTIFIED BY 你的密码;
按照这个顺序操作后,再去Carbon控制台测试数据源连接,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者Moe
相关产品推荐
相关产品推荐

