2010-12-12 6 views
5

Mein Kunde ist eine Zahnarztpraxis, die eine Praxisverwaltungssoftware gekauft hat. Diese Software wurde auf ihrem lokalen Server installiert, einschließlich einer Patientendatenbank, eines Zeitplans und aller Arten von Krankenakten. Jetzt wollen sie, dass ich einige Dienstprogramme für sie schreibe, die nicht mit ihrem Paket geliefert werden, und dafür muss ich diese Datenbank abfragen können.Wie bekomme ich das Datenbankschema einer versteckten DB?

Ich habe versucht, technischen Support der Softwarehersteller anzurufen (Patterson/EagleSoft), und es ist schwierig, jemanden zu finden, der die Technologie genug versteht, um meine Fragen zu beantworten. Soweit ich das beurteilen kann, gibt es keine API für ihre Software, und verständlicherweise wollen sie mir nicht sagen, wie ich die Datenbank direkt programmgesteuert abfragen soll. Sie haben ein interaktives Abfragefenster, aber das ist natürlich nicht gut für automatisierte Abfragen. Alles, was sie tun würden, ist, dass es irgendwo eine SQL Server DB gibt, aber die ODBC-Treiber, mit denen eine Verbindung hergestellt wird, sind SQL Anywhere-Treiber (nicht wahr?).

Also ich suchte auf dem Server und konnte keine Datenbankdateien finden. Dann entdeckte ich, dass die Installation eine Art proprietäre virtuelle Maschine erstellt, die nur für die EagleSoft-Software sichtbar ist. Aber während sie ihre DB in Schichten der Verschleierung sehr gut isolieren konnten, haben sie einen ODBC-Treiber offen gelassen, der tatsächlich eine SQL Anywhere-Verbindung ist.

Jetzt nach dieser faszinierenden und langen Präambel, hier ist meine Frage: Welche Abfragen kann ich über diese ODBC-Verbindung ausführen, um die DB hinsichtlich ihrer Struktur zu befragen? Wenn es eine SQL Server DB darunter ist, könnte ich die sysobjects-Tabelle verwenden, aber ich verstehe nicht vollständig, wie Sie eine SQL Anywhere-ODBC-Verbindung verwenden können, um eine Verbindung zu einer MSSQL-DB herzustellen. Und wenn sie mich falsch informierten und es wirklich eine SQL Anywhere DB darunter ist, welche Abfragen müssen ausgeführt werden, um die DB Struktur zu erhalten?

Und wenn es noch jemand gibt, der jemals EagleSoft (oder ein ähnliches proprietäres Paket) abgefragt hat - bitte sagen Sie mir, wie Sie es gemacht haben!

+0

@Marc Gravell: Die ODBC-API verfügt über generische Fähigkeit zum Introspecting-Schema, und das wäre eine nicht sehr lokalisierte Antwort auf diese Frage. – bmargulies

Antwort

6

Es stellt sich heraus, dass es am einfachsten ist, eine kleine App mit OdbcDbConnection zu schreiben und eine Verbindung mit dem DSN herzustellen, der mit der Software installiert wurde. Es dauerte eine Probe 'select * from sysobjects' zu enthüllen, dass es tatsächlich eine MS-SQL-Datenbank unter all dem ist, und ich bin gut, von dort zu gehen!

+0

Woher wissen wir, welcher DSN mit Software installiert ist? Benötigen wir auch Anmeldeinformationen für die Verbindung zur Datenbank? –

+0

Shaul Behr können Sie Ihren Beispielcode posten Ich arbeite auch mit Eaglesoft –

+0

@BlaireAndaloc Dieser Beitrag nähert sich seinem 5. Jahrestag. Code irgendwo in einem archivierten Projekt vergraben. Sorry ... –

1

ich ein Tool wie squirel verwenden würde, die bei gerade eine Datenbank groß ist zu überprüfen, ob jemand mit „SQL Anywhere“ erfolgreich war das Google-Ergebnis:

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

Zeigt, dass andere es geschafft haben, zu erhalten Eichhörnchen, dies zu tun. Es ist ziemlich einfach zu benutzen ... vorausgesetzt natürlich, du schaffst es, die Verbindung zum Laufen zu bringen!

0

Ich habe meine eigene PHP-basierte Website geschrieben, um auf Daten in meiner Eaglesoft-Datenbank zuzugreifen und sie zu bearbeiten. Sie erstellen einfach ODBC-Verbindung zum lokalen DNS-Eintrag und fertig. Um die Datenbankstruktur anzuzeigen, können Sie die technische Referenz verwenden, die in eaglesoft oder dem erweiterten Abfragetool enthalten ist.

+0

Können Sie erklären, wie Sie PHP verwendet haben, um eine Verbindung mit Eaglesoft-Datenbank herzustellen bitte. –

0

Ein paar Werkzeuge, die helfen könnten, sind SQLWorkbench und Django. Ich benutze SQLWorkbench, um die Daten aus dem Produktionssystem in eine Postgres-Datenbank zu kopieren, damit ich sie hacken kann, ohne die Produktionsumgebung zu beschädigen. Dann verwende ich Djangos inspectdb, um Modelle der Datenbankumgebung zu erzeugen. Von dort aus ist es einfach, 'Ansichten' in die Datenbank und Vorlagen zu erstellen, um genau das anzuzeigen, was ich möchte.

+0

Ich versuche eine Verbindung mit RazorSQL herzustellen und es werden Datenbankname und Auth-Details abgefragt. Wenn ich auf die ODBC.ini in der Registrierung schaue, sehe ich keine dieser Details gespeichert, irgendeine Idee, was der Standard für Eaglesoft ist? – Alan

+0

Alle Eaglesoft-Clients (mindestens in der Version 14-ish Tage) würden eine Datenbankverbindung zum Server erstellen und direkt abfragen, anstatt einige Daten an den Serverprozess zu senden und ein Ergebnis zu erhalten. Dies bedeutet, dass sich der Kunde mit einem Benutzernamen und einem Passwort anmeldet. Und es war früher Klartext - kein SSL/TLS. So fire wireshark auf deinem Windows Server, der Eaglesoft hostet und Pakete erfasst. Sie sollten in der Lage sein, den Benutzernamen und das Passwort zu erhalten. :) –

+0

Danke Aaron, ich benutze die neueste Demo (Version 18.00) auf einem lokalen Computer. Ich habe nmap installiert, da winpcap keinen localhost-Datenverkehr durchführen kann, aber nichts mit Wireshark. Ich habe keine Erfahrung, SSL/TLS zu entschlüsseln, aber wenn es klarer Text ist, konnte ich in den Loopback-Protokollen keine Übereinstimmungen für "pass" oder "user" finden. – Alan

Verwandte Themen