我继承了试图逆向设计一个特别复杂的Web应用程序混乱的不费力的任务。更准确地说,所述应用程序存储其数据。最初的开发人员早已离开了更加绿色的牧场,甚至没有人记得他们可能是谁。
该应用程序显然将Spring与Hibernate结合使用。我设法找到了这两个数据源配置(准确地说是WEB-INF/spring/datasourceContext.xml
):
<bean id="oliteTechDataSource" name="oliteTechDataSource"
class="xxx.yyy.zzz.datasource.tttDataSource" init-method="init">
<property name="driverClassName">
<value>oracle.lite.poljdbc.POLJDBCDriver</value>
</property>
<property name="url">
<value>jdbc:polite:</value>
</property>
<property name="password">
<value>MANAGER</value>
</property>
<property name="database">
<value>BIRNBAUM</value>
</property>
</bean>
和
<bean id="opeTechDataSource" name="opeTechDataSource"
class="xxx.yyy.zzz.datasource.uuuDataSource"
init-method="init">
<property name="driverClassName">
<value>oracle.jdbc.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:orcl11g</value>
</property>
<property name="username">
<value>apfelbaum</value>
</property>
<property name="password">
<value>zypresse</value>
</property>
</bean>
这两个片段似乎相互矛盾:第一个建议 Oracle Lite ,第二个建议是“完整”的Oracle。我发现后者的一个实例在这台机器上运行,即Release 11.2.0.2.0 Production
(由SQL * Plus报告)。第二个片段的凭据允许我登录,但除了几个系统表之外,该数据库似乎是空的。确切地说,查询SELECT OWNER, TABLE_NAME, NUM_ROWS FROM ALL_TABLES
时唯一拥有非空行数的表归SYSTEM
或SYS
所有。我现在最好的客人是数据保存在第一个片段中提到的数据库中,但我还没有发现它的痕迹。
当故意崩溃提到的Oracle实例时,应用程序停止工作,因此我假设第一个代码段可能是一些从未删除的旧版本的遗留问题。这仍然让我想到数据可能隐藏在数据库中的确切位置。通过使用上面提到的凭据登录,我获得了一个由类似用户拥有的非常小的表列表(让我们称之为apfeladmin
),这显然不是Oracle的默认用户。所有这些表都具有排序C$SOMETHING
的名称。 C$TABLE_LIST
特别包含我在反汇编应用程序时在查询中找到的表的名称。
但实际的桌子在哪里?我知道Hibernate和Spring是什么,但不是更多。我只有编译的类,以及一堆XML文件。是否有可能从数据库中如何布置数据中辨别出来? “典型的”Hibernate-ERP应用程序如何做到这一点?我假设一旦我知道我在寻找什么,那么我就能找到它。或者这只是一个权限问题,在我设法获得DBA访问权限之前,我将无法继续获得任何进一步的权限(没有人会这样做,所以这并不像应该的那样容易)?< / p>
答案 0 :(得分:0)
确保您具有访问所需数据库的权限。某些数据库软件会根据权限隐藏数据库的一部分。
因此尝试以管理员或暴力强制方式访问它可能会有效。这一切都取决于给数据库的权限设置。