我在 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
但是我需要从本地运行的 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,但无法看到记录的任何可用于验证的凭据。
您可以通过运行查询来检查数据库上失败的登录吗
SELECT * FROM DBA_AUDIT_SESSION WHERE RETURNCODE != 0;