2010-12-12 104 views
5

我的客戶是購買了一個練習管理軟件的牙科診所。該軟件安裝在本地服務器上,包括患者數據庫,時間表和所有的病歷記錄。現在他們希望我爲它們編寫一些實用程序,這些實用程序未隨其包提供,爲此我需要查詢此數據庫的功能。如何獲取隱藏數據庫的數據庫模式?

我試過打電話給軟件製造商的技術支持(Patterson/EagleSoft),很難找到任何理解該技術的人都足以回答我的問題。據我所知,他們的軟件沒有API,可以理解的是,他們不願意告訴我如何直接以編程方式查詢數據庫。他們確實有一個交互式查詢窗口,但顯然這對編寫自動化查詢沒有好處。他們所要做的只是某個地方有一個SQL Server數據庫,但連接到它的ODBC驅動程序是SQL Anywhere驅動程序(呵?)。

所以我搜索了服務器周圍,找不到任何數據庫文件。然後我發現安裝創建了一些專有的虛擬機,只有EagleSoft軟件才能看到。但是,儘管他們已經非常擅長將數據庫隔離到一層混淆,但他們已經開放了一個ODBC驅動程序,這確實是一個SQL Anywhere連接。

現在,在那段引人入勝和冗長的序言之後,這裏是我的問題:我可以通過此ODBC連接運行哪些查詢來詢問數據庫的結構?如果它是下面的SQL Server數據庫,我可以使用sysobjects表,但我不完全瞭解如何使用SQL Anywhere ODBC連接來連接到MSSQL DB。如果他們錯誤地描述了我,並且它確實是下面的SQL Anywhere數據庫,那麼運行查詢DB結構的查詢是什麼?

如果還有其他人曾經成功地實際查詢過EagleSoft(或任何類似的專有軟件包) - 請告訴我您是如何做到的!

+0

@Marc Gravell:ODBC API具有用於自省模式的泛型功能,這對於這個問題來說不是一個非常本地化的答案。 – bmargulies 2010-12-14 01:56:39

回答

6

原來,最簡單的方法是使用OdbcDbConnection編寫一個小應用程序,並使用隨軟件安裝的DSN進行連接。我們花了一次探測'select * from sysobjects'才發現它確實是一個MS-SQL數據庫,我很高興能夠從這裏開始!

+0

我們如何知道軟件安裝了哪個DSN。我們是否也需要任何憑證來連接到數據庫? – 2015-07-24 10:45:39

+0

Shaul Behr你可以發佈你的示例代碼我也可以和eaglesoft一起工作 – 2015-11-27 07:50:51

+0

@BlaireAndaloc這篇文章已經接近5週年紀念了。將代碼隱藏在歸檔項目的某處。對不起...... – 2015-11-27 09:39:23

0

我寫了我自己的PHP驅動的網站來訪問和操縱我的eaglesoft數據庫中的數據。您只需創建odbc連接到本地DNS條目並完成。要查看數據庫結構,您可以使用包含在eaglesoft或高級查詢工具中的技術參考。

+0

你能解釋一下你如何使用PHP與eaglesoft數據庫建立連接嗎? – 2016-10-26 22:31:57

0

一些可能有用的工具是SQLWorkbenchDjango。我使用SQLWorkbench將生產系統中的數據複製到Postgres數據庫中,以便在不損壞生產環境的情況下對其進行破解。然後我使用Django的inspectdb生成數據庫環境的模型。從那裏可以很容易地在數據庫和模板中創建'視圖'以準確顯示我想要的內容。

+0

我嘗試使用RazorSQL進行連接,它要求提供數據庫名稱和身份驗證詳細信息。查看註冊表中的ODBC.ini,我沒有看到任何這些細節被保存,不知道Eaglesoft的默認值是什麼? – Alan 2017-08-18 22:16:59

+0

所有的Eaglesoft客戶端(至少在14日後的版本中)會創建到服務器的數據庫連接並直接進行查詢,而不是將一些數據發送到服務器進程並獲得結果。這意味着客戶使用用戶名和密碼登錄。它曾經是明文 - 沒有SSL/TLS。因此,啓動Eaglesoft主機並捕獲數據包的Windows Server上的wireshark。你應該能夠獲得用戶名和密碼。 :) – 2017-08-20 00:54:04

+0

感謝亞倫,我在本地計算機上使用最新的演示(版本18.00)。我安裝了nmap,因爲winpcap不能執行本地主機通信,但沒有看到任何使用Wireshark的東西。我沒有任何解密SSL/TLS的經驗,但如果它是明文,我在回送日誌中找不到「pass」或「user」的任何匹配。 – Alan 2017-08-21 16:36:39