我有一个遗留应用程序,它连接到已配置的Oracle数据库。
似乎它有一些逻辑会改变数据库凭据,因为它无法成功登录到Oracle数据库,而在同一台机器上启动的sqlplus
能够登录。
我得到的错误是:[DataDirect][ODBC Oracle Wire Protocol driver][Oracle]ORA-01017: invalid username/password; logon denied
如何找出发送到数据库的数据库用户名和密码是什么?
到目前为止我尝试过:
启用对Oracle(audit create session whenever not successful
)上登录尝试失败的审核。它没有解决问题,因为它只记录没有密码的用户名,这似乎是正确的。
使用嗅探器窃听运行应用程序的计算机与数据库之间的网络流量,但由于Oracle的TNS协议已加密,因此没有太多帮助。
在端口X上使用netcat
启动服务器,在应用程序配置文件中提供端口X.应用程序确实连接到我的服务器,这就是我知道应用程序连接到正确的服务器的方式。但由于TNS协议非常复杂(需要在客户端和服务器之间交换一系列消息),我希望有一个更简单的原因可以实现我想要的,而无需对Oracle进行逆向工程并实现自己的服务器。
启用JDBC驱动程序跟踪(Trace=1
,TraceFile
,TraceDll
)。跟踪文件显示正确的用户名,但显然密码未记录。
我的环境:
答案 0 :(得分:1)
我不确定,但如果通过ODBC驱动程序建立连接(如问题标签中所述),那么您可以尝试使用ODBC Tracing之类的ODBC嗅探工具。
引用:
密码“嗅探”使用跟踪
ODBC提供了一种跟踪驱动程序和主机数据库之间发生的对话的方法。开发人员用于测试目的,跟踪功能旨在帮助程序员准确了解正在发生的事情并帮助解决问题。但是,恶意的坏人可以使用跟踪(也称为“嗅探”)来检索用户密码。
启用跟踪时,与主机的通信将写入文件。这包括用纯文本捕获的用户ID和密码。
<强>更新强>
SQLPlus使用OCI接口连接到Oracle,但DataDirect ODBC驱动程序使用它自己专有的通信协议实现。因此,最可能的故障点是驱动程序配置错误或不兼容。
DataDirect为ODBC驱动程序诊断提供了一些tools,但只有适用于相关案例的选项才使用snoop
实用程序,它就像netcat
一样已经尝试过。
由于在凭据验证阶段连接失败,最可能的错误来源是使用本地化符号作为用户名或密码。 DataDirect Knowledge Search(搜索ORA-01017
)中列出了Oracle身份验证过程的一些问题。
似乎DataDirect提供了两个独立版本的驱动程序,支持和不支持Unicode,因此可能的一个失败点是将非Unicode版本的驱动程序连接到Unicode版本的数据库,反之亦然。
P.S。目前我对DataDirect ODBC驱动程序没有任何经验。因此,这只是关于可能的失败原因的建议。