Oracle DB ORA-01017 错误在应用程序中,但在数据库工具中没有,如何调试

问题描述 投票:0回答:1

我在 AWS RDS 中设置了 Oracle 19c 数据库。要从本地计算机连接到它,我需要创建一个 SSH 隧道,如下所示:

ssh -N -i ~/rsa_key -L 127.0.0.1:1522:db-dev.gc.net:1522 [电子邮件受保护]

从这里,我使用以下 jdbc 连接来连接到我的开发数据库:

jdbc:oracle:薄:@127.0.0.1:1522:DV

当我从 DataGrip 执行此操作时,效果很好: enter image description here

但是我需要从本地运行的 Spring Boot Java 11 应用程序连接到此数据库,但出现以下错误:

错误 restartedMain c.z.h.p.HikariPool:594 - HikariPool-2 - 池初始化期间出现异常。 java.sql.SQLException: ORA-01017: 无效的用户名/密码;登录被拒绝

我实际上是将完全相同的用户名/密码复制并粘贴到 DataGrip 和我的代码中。

以下是各个项目文件的详细信息:

build.gradle

dependencies {
    api 'com.oracle.database.jdbc:ojdbc11:21.1.0.0'
    testImplementation 'com.h2database:h2'
    testImplementation "org.springframework.security:spring-security-test:5.1.3.RELEASE"
}

application.yml

core:
  datasource:
    driverClassName: oracle.jdbc.OracleDriver
    jdbc-url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1522))(CONNECT_DATA=(SERVER=DEDICATED)(SID=DV)))
    username: dbuser
    password: dbpassword
    platform: oracle
    dialect: org.hibernate.dialect.Oracle10gDialect

我已经检查了数据库参数

NAME                     TYPE     VALUE
------------------------ -------- ------------------------------
sec_case_sensitive_logon boolean  TRUE

我已经检查了

DBA_USERS
表中的用户

[
  {
    "USERNAME": "dbuser",
    "USER_ID": 21,
    "PASSWORD": null,
    "ACCOUNT_STATUS": "OPEN",
    "LOCK_DATE": null,
    "EXPIRY_DATE": null,
    "PASSWORD_VERSIONS": "11G 12C ",
    "EDITIONS_ENABLED": "N",
    "AUTHENTICATION_TYPE": "PASSWORD"
  }
]

我的问题是,有没有办法让 ssh 隧道记录正在传递的凭证,或者使用wireshark 监控通过隧道发送的凭证,或者查看 AWS 中的 Oracle 数据库日志,其中可以显示用于身份验证的用户名/密码?

我的猜测是,Spring Boot 应用程序中的 jdbc 驱动程序在发送之前以某种方式操纵

application.yml
文件中提供的密码,例如;上壳或下壳。

已设置wireshark来侦听tcp.dstport == 1522,但无法看到记录的任何可用于验证的凭据。

oracle spring-boot amazon-rds wireshark oracle19c
1个回答
0
投票

您可以通过运行查询来检查数据库上失败的登录吗
SELECT * FROM DBA_AUDIT_SESSION WHERE RETURNCODE != 0;

© www.soinside.com 2019 - 2024. All rights reserved.