【问题标题】:How to get at the database schema of a hidden DB?如何获取隐藏数据库的数据库模式?
【发布时间】:2010-12-12 09:08:13
【问题描述】:

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

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

所以我在服务器上四处搜索,找不到任何数据库文件。然后我发现安装创建了某种专有虚拟机,它只对 EagleSoft 软件可见。但是,虽然他们非常擅长在混淆层中隔离他们的数据库,但他们仍然打开了一个 ODBC 驱动程序,这确实是一个 SQL Anywhere 连接。

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

如果还有其他人曾经成功地实际查询过 EagleSoft(或任何类似的专有软件包),请告诉我你是如何做到的!

【问题讨论】:

  • @Marc Gravell:ODBC API 具有内省模式的通用能力,这不是对这个问题的本地化答案。

标签: sql-server odbc sqlanywhere


【解决方案1】:

事实证明,最简单的方法是使用OdbcDbConnection 编写一个小应用程序,然后使用随软件安装的 DSN 进行连接。试探一下'select * from sysobjects' 后发现它确实是一个 MS-SQL 数据库,我很高兴从那里开始!

【讨论】:

  • 我们如何知道哪个 DSN 安装了软件。我们还需要任何凭据来连接数据库吗?
  • Shaul Behr 你能发布你的示例代码吗?我也在使用 eaglesoft
  • @BlaireAndaloc 这篇文章即将发布 5 周年。隐藏在存档项目某处的代码。对不起...
  • @ShaulBehr 你还记得你用的是什么驱动吗?
  • @KentaGoto SQL Server 驱动程序 IIRC
【解决方案2】:

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

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

表明其他人已经设法让松鼠做到这一点。它非常易于使用...当然前提是您设法使连接正常工作!

【讨论】:

    【解决方案3】:

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

    更新:从 Eaglesoft 19 开始,Patterson 似乎对数据库进行了密码保护,并且他们已经竭尽全力防止用户在不支付访问费用的情况下获取数据。

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

    【讨论】:

    • 我正在尝试使用 RazorSQL 进行连接,它要求提供数据库名称和身份验证详细信息。查看注册表中的 ODBC.ini,我没有看到任何保存的详细信息,知道 Eaglesoft 的默认设置是什么吗?
    • 所有 Eaglesoft 客户端(至少早在 14 天左右的版本中)都会创建与服务器的数据库连接并直接查询,而不是向服务器进程发送一些数据并获得结果。这意味着客户端使用用户名和密码登录。它曾经是明文——没有 SSL/TLS。因此,在托管 Eaglesoft 的 Windows Server 上启动 wireshark 并捕获数据包。您应该能够获得用户名和密码。 :)
    • 感谢 Aaron,我正在本地计算机上使用最新的演示(版本 18.00)。我安装了 nmap,因为 winpcap 无法进行 localhost 流量,但使用 Wireshark 看不到任何东西。我没有任何解密 SSL/TLS 的经验,但如果是明文,我在环回日志中找不到 passuser 的任何匹配项。
    • 我很乐意在这个问题上与您合作,因为我必须与 Eaglesoft 打交道 10 年。给我发一封电子邮件。这是我在“heyaaron.com”上的名字“aaron”。找到解决方案后,我们可以在此处发布。
    【解决方案4】:

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

    【讨论】:

    • 你能解释一下你是如何使用PHP与eaglesoft数据库建立连接的吗?
    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2020-02-24
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多