如何获取隐藏数据库的数据库模式?

时间:2010-12-12 09:08:14

标签: sql-server odbc sqlanywhere

我的客户是牙科诊所,已经购买了一块练习管理软件。该软件安装在本地服务器上,包括患者数据库,时间表和各种医疗记录。现在,他们希望我为他们编写一些未提供其软件包的实用程序,为此,我需要能够查询此数据库。

我尝试过调用软件制造商的技术支持(Patterson/EagleSoft),很难找到任何理解这项技术的人来回答我的问题。据我所知,他们的软件没有API,可以理解他们不愿意告诉我如何直接以编程方式查询数据库。他们确实有一个交互式查询窗口,但显然这对编写自动查询没有好处。他们所能留下的只是某个地方有一个SQL Server数据库,但连接到它的ODBC驱动程序是SQL Anywhere驱动程序(嗯?)。

所以我在服务器上搜索并找不到任何数据库文件。然后我发现安装会创建某种专有虚拟机,只有EagleSoft软件才能看到它。但是虽然他们非常善于将数据库隔离在一堆混淆中,但是他们已经打开了一个ODBC驱动程序,这确实是一个SQL Anywhere连接。

现在,在这个引人入胜且冗长的序言之后,我的问题是:我可以通过此ODBC连接运行哪些查询来询问数据库的结构?如果它是下面的SQL Server DB,我可以使用sysobjects表,但我不完全掌握如何使用SQL Anywhere ODBC连接来连接到MSSQL DB。如果他们误导我并且它下面确实是一个SQL Anywhere数据库,那么为了获得数据库结构需要运行哪些查询?

如果还有其他人在实际查询EagleSoft(或任何类似的专有软件包)方面取得了成功 - 请告诉我你是如何做到的!

4 个答案:

答案 0 :(得分:7)

原来最简单的方法是使用OdbcDbConnection编写一个小应用程序,然后使用随软件安装的DSN进行连接。花了一个探测'select * from sysobjects'来揭示它确实是一个MS-SQL数据库,而且我很高兴从那里开始!

答案 1 :(得分:1)

我会使用像squirel这样的工具,它非常适合浏览任何数据库,以检查是否有人成功使用“SQL Anywhere”这个谷歌搜索结果:

http://blog.gmane.org/gmane.comp.db.squirrel-sql.users/month=20091001

显示其他人已设法让松鼠这样做。这很容易使用......当然,假设您设法使连接正常工作!

答案 2 :(得分:1)

可能有用的一些工具是SQLWorkbenchDjango。我使用SQLWorkbench将数据从生产系统复制到Postgres数据库中,这样我就可以在不损坏生产环境的情况下进行破解。然后我使用Django的inspectdb来生成数据库环境的模型。从那里可以很容易地在数据库和模板中创建“视图”以准确显示我想要的内容。

更新:从Eaglesoft 19开始,看起来Patterson有密码保护数据库,他们已经竭尽全力阻止用户获取数据而无需支付访问费用。

更新:就像我之前提到的,Eaglesoft 19有一个锁定版本的数据库。对于只读访问,您可以致电Patterson并要求他们输入安装在服务器上的“技术参考”工具的“数据库管理员”部分的密码。进入后,可以选择设置只读密码以访问数据库。用户名是'dba'以及您设置的密码。有时需要与它们进行一些反复来给你访问,但我的解决方案是说“我们已经将患者数据放入Eaglesoft十多年了,而且我们总是可以访问数据库。现在你限制它并告诉我们我们必须支付才能访问。听起来你正试图通过控制我们的数据来勒索钱财。我应该由我们的法律团队来管理。“< / p>

答案 3 :(得分:0)

我编写了自己的PHP驱动网站来访问和操作我的eaglesoft数据库中的数据。您只需创建与本地DNS条目的odbc连接并完成。要查看数据库结构,您可以使用eaglesoft或高级查询工具中包含的技术参考。