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

使用Oracle Wallet连接Logstash时遇ORA-01017用户名/密码无效错误

问题分析

你遇到的ORA-01017错误,根源在于Logstash JDBC插件对空字符串jdbc_user的处理逻辑与Oracle JDBC驱动的外部认证(Wallet)逻辑不兼容:当你将jdbc_user设为空字符串时,插件会把空用户参数传递给驱动,驱动将其视为无效的认证请求,而非触发Wallet的无密码认证逻辑;而sqlplus /@name_high的写法会直接触发外部认证,因此可以正常连接。

解决方案

1. 修正JDBC驱动类

ojdbc10推荐使用标准驱动类,废弃的旧驱动类可能对Wallet支持存在兼容性问题:
将配置中的jdbc_driver_class从Java::oracle.jdbc.driver.OracleDriver改为:

jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"

2. 调整jdbc_user参数

不要设置为空字符串,改为传递"/",这会触发Oracle JDBC驱动的外部认证逻辑,与sqlplus /@name_high的行为一致。同时确保不配置jdbc_password参数。

3. 验证Wallet配置文件

确认${ORACLE_HOME}/network/admin/wallet下的sqlnet.ora包含以下配置,确保驱动能正确识别Wallet:

WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = ${ORACLE_HOME}/network/admin/wallet)))
SQLNET.AUTHENTICATION_SERVICES = (TCPS, BEQ)

4. 修改后的完整配置示例

input {
    jdbc {
        jdbc_driver_library => "${ORACLE_HOME}/dmu/jlib/ojdbc10.jar,${ORACLE_HOME}/ucp/lib/ucp.jar,${ORACLE_HOME}/jlib/oraclepki.jar,${ORACLE_HOME}/jlib/osdt_cert.jar,${ORACLE_HOME}/jlib/osdt_core.jar"
        jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
        jdbc_connection_string => "jdbc:oracle:thin:/@name_high?TNS_ADMIN=${ORACLE_HOME}/network/admin/wallet"
        jdbc_user => "/"
        schedule => "* * * * * *"
        statement => "SELECT * from table"
        connection_retry_attempts => 2
        connection_retry_attempts_wait_time => 5
        jdbc_pool_timeout => 20
        jdbc_validation_timeout => 600
    }
}

额外排查点

  • 再次确认Logstash进程的运行用户对Wallet目录下的ewallet.p12、cwallet.sso等文件有读权限;
  • 检查ojdbc10.jar版本与Oracle数据库版本的兼容性,避免版本不匹配导致的认证异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:55:17