2010-12-12 35 views
5

Mi cliente es una clínica dental que ha comprado un software de administración de prácticas. Este software se instaló en su servidor local, incluida una base de datos de pacientes, un cronograma y todo tipo de registros médicos. Ahora quieren que les escriba algunas utilidades que no están provistas con su paquete, y para esto necesito la capacidad de consultar esta base de datos.¿Cómo llegar al esquema de la base de datos de una base de datos oculta?

Intenté llamar a soporte técnico de los fabricantes de software (Patterson/EagleSoft), y es difícil encontrar a alguien que entienda la tecnología lo suficiente como para responder mis preguntas. Por lo que puedo decir, no hay API para su software, y comprensiblemente son reacios a decirme cómo consultar el DB directamente, mediante programación. Tienen una ventana de consulta interactiva, pero obviamente eso no es bueno para escribir consultas automatizadas. Todo lo que dejarían ver es que en algún lugar hay un DB de SQL Server, pero los controladores ODBC para conectarse son controladores SQL Anywhere (¿eh?).

Así que busqué en el servidor y no pude encontrar ningún archivo de base de datos. Luego descubrí que la instalación crea algún tipo de máquina virtual patentada, que solo es visible para el software EagleSoft. Pero aunque han sido muy buenos para aislar su base de datos en capas de ofuscación, han dejado abierto un controlador ODBC, que de hecho es una conexión SQL Anywhere.

Ahora, después de este fascinante y extenso preámbulo, aquí está mi pregunta: ¿Qué consultas puedo ejecutar sobre esta conexión ODBC para interrogar al DB sobre su estructura? Si se trata de una base de datos de SQL Server, podría utilizar la tabla sysobjects, pero no entiendo completamente cómo puede usar una conexión ODBC de SQL Anywhere para conectarse a una base de datos MSSQL. Y si me estaban informando mal y en realidad es un DB de SQL Anywhere debajo, ¿cuáles son las consultas que se deben ejecutar para llegar a la estructura de la base de datos?

Y si hay alguien más que haya tenido éxito en consultar realmente a EagleSoft (o cualquier paquete propietario similar), ¡cuénteme cómo lo hizo!

+0

@Marc Gravell: La API ODBC tiene una capacidad genérica para el esquema de introspección, y esa sería una respuesta no muy localizada a esta pregunta. – bmargulies

Respuesta

6

Resulta que la manera más simple de hacerlo fue escribir una aplicación pequeña usando OdbcDbConnection, y conectarse utilizando el DSN instalado con el software. Fue necesario un sondeo 'select * from sysobjects' para revelar que es, de hecho, una base de datos MS-SQL debajo de todo eso, ¡y estoy listo para partir desde allí!

+0

¿Cómo sabemos qué DSN está instalado con el software? Además, ¿necesitamos credenciales para conectarnos a la base de datos? –

+0

Shaul Behr puede publicar su código de muestra También estoy trabajando con eaglesoft –

+0

@BlaireAndaloc Esta publicación se acerca a su 5 ° aniversario. Código enterrado en algún lugar de un proyecto archivado. Lo siento ... –

1

que haría uso de una herramienta como squirel que es muy bueno para navegar por cualquier base de datos para comprobar si alguien ha tenido éxito con "SQL Anywhere" este resultado Google:

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

muestra que otros han conseguido ardilla para hacer esto. Es bastante fácil de usar ... suponiendo, por supuesto, que logras que la conexión funcione.

0

He escrito mi propio sitio web impulsado por PHP para acceder y manipular datos en mi base de datos de eaglesoft. Simplemente crea una conexión odbc a la entrada DNS local y listo. Para ver la estructura de la base de datos, puede usar la referencia técnica incluida en eaglesoft o la herramienta de consulta avanzada.

+0

¿Puede explicar cómo usó PHP para establecer una conexión con la base de datos de eaglesoft? –

0

Algunas herramientas que pueden ayudar son SQLWorkbench y Django. Utilizo SQLWorkbench para copiar los datos del sistema de producción en una base de datos de Postgres para poder hackearlos sin dañar el entorno de producción. Luego uso Django's inspectdb para generar modelos del entorno de la base de datos. A partir de ahí, es fácil crear 'vistas' en la base de datos y las plantillas para mostrar exactamente lo que quiero.

+0

Estoy intentando conectar usando RazorSQL y está pidiendo el nombre de la base de datos y los detalles de autenticación. Si miro ODBC.ini en el registro, no veo que se guarde ninguno de esos detalles, ¿alguna idea de cuál es el valor predeterminado para Eaglesoft? – Alan

+0

Todos los clientes de Eaglesoft (al menos en la versión 14-ish days) crearían una conexión de base de datos con el servidor y consultarían directamente en lugar de enviar algunos datos al proceso del servidor y obtener un resultado. Esto significa que el cliente inicia sesión con un nombre de usuario y contraseña. Y solía ser texto claro, sin SSL/TLS. Por lo tanto, inicie wireshark en su Windows Server que aloja Eaglesoft y capture paquetes. Debería poder obtener el nombre de usuario y la contraseña. :) –

+0

Gracias Aaron, estoy usando la última demostración (versión 18.00) en una computadora local. Instalé nmap porque winpcap no puede hacer tráfico de localhost, pero no ve nada usando Wireshark. No tengo ninguna experiencia para descifrar SSL/TLS, pero si es texto claro, no pude encontrar ninguna coincidencia para 'pass' o' user' en los registros de loopback. – Alan

Cuestiones relacionadas