Foros del Web » Administración de Sistemas » Seguridad y redes »

Misterio ODBC

Estas en el tema de Misterio ODBC en el foro de Seguridad y redes en Foros del Web. Hola a todos. Tengo una página montada en un servidor web (WebServer), que debe leer datos en un servidor de bases de datos (DBServer). Ambos ...
  #1 (permalink)  
Antiguo 29/08/2003, 10:09
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Misterio ODBC

Hola a todos.

Tengo una página montada en un servidor web (WebServer), que debe leer datos en un servidor de bases de datos (DBServer). Ambos equipos tienen Windows 2000 Advanced Server.

El el WebServer he creado un DSN de Sistema que apunta a un archivo Access en el otro equipo el cual no puedo leer usando un pequeñísimo script de prueba que solo intenta conectarse.

El error es:

Warning: SQL error: [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data., SQL state S1000 in SQLConnect in c:\web\crs\dbtest.php on line 4

Debo decir que el archivo en cuestion no esta siendo usado por nadie, no esta readonly, no esta bloqueado, lo puedo leer localmente, etc.

- Si copio el mismo archivo Access al WebServer y modifico mi ODBC funciona a la perfección.
- Mi WebServer esta funcionando como un equipo aislado, no tiene instalado Active Directory, y el usuario con el que la gente se conecta esta registrado en el DBServer.
- La carpeta donde esta el archivo Access esta compartida con derechos TOTALES a cualquiera.
- He probado hacer administrador al usuario que se conecta y tambien falla.
- He probado renombrar y cambiar de sitio el archivo Access y falla.

Pero siempre funciona cuando lo pongo local.

He debido subir una página el lunes y ya lleva 4 dias de retraso.

¿Alguien me puede dar una pista?
  #2 (permalink)  
Antiguo 29/08/2003, 12:48
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Hola kao,

seguramente esto no va a servir para nada pero... casualmente no tendrás abierta la base de access cuando lo intentas? (desde access, me refiero)
  #3 (permalink)  
Antiguo 29/08/2003, 13:01
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
No tuni, segurísimo que no. Los dos servidores se estan estrenando con este proyecto por lo que no hay ningún usuario conectado salvo yo mismo. He probado luego de reiniciar el equipo, en modo local, en modo remoto, con el archivo original, con copias, con archivos creados para la ocasión, es decir: seguro que ni yo ni nadie lo tiene abierto.

Tambien me he asegurado de tener cerrado Access, que no haya quedado un *.ldb por alli, que el archivo no este readonly, etc.

Gracias por tu interés...si tienes otra idea...
  #4 (permalink)  
Antiguo 29/08/2003, 13:08
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
pues no, esto de las bases de datos lo justito y que no se me tuerza nada o no sé salir de ahí.

Pero si se me ocurre seguro te aviso
  #5 (permalink)  
Antiguo 30/08/2003, 07:12
Avatar de tania
Colaborador
 
Fecha de Ingreso: agosto-2002
Ubicación: Milano
Mensajes: 4.426
Antigüedad: 22 años, 4 meses
Puntos: 23
Hola Kao

Disculpa la tardanza!!


En cuanto a database y PHP no soy experta.....

donde no te entiendo cuando dices que has creado un DNS en el webserver!!! si hablas de windows 2000 advanced server el servicio DNS es un servidor aparte o una MMC.

Ahora bien, tambien dices tener otro servidor DBServer donde se conectan los usuarios, este servidor tiene el active directory???

La idea es esta: verificar que el trust en ambos server este activa, deberia ser asi por que ambos son windows 2000 y la relacion de confianza es automatica.

para verificar esto vas a herramientas administrativas y abre la mmc que dice domains and trust ahi debes ver todos los servidores de tu red y haciendo doble click en alguno de ellos ves las propiedades de confianza.
__________________
Evitemos abrir post con títulos "Ayuda..." "Urgente..." le quitan valor a nuestro motor de búsqueda y por otra parte, escribe de manera correcta , quien te lea y quiere ayudarte, no pierde tiempo al descifrar lo que escribiste.
  #6 (permalink)  
Antiguo 31/08/2003, 07:18
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Hola tania y muchísimas gracias por tenderme un cable.

Me parece que lo que me dices apunta en la dirección correcta, pero necesito un poquito mas de información. Los dos servidores se ven cuando yo intento entrar en uno desde el otro, pero es como si "no confian" mutuamente como para hablar por ODBC.

Fíjate, mi servidor Web no tiene montado Active Directory puesto que el no tiene un dominio asociado. Es una máquina con un DNS que apunta hacia ella y por ende expuesta a los daños que por Internet se le puedan ocasionar. En este servidor tengo mis páginas web y para acceder a los datos, uso una conexión por ODBC para lo que he creado un DSN (Data Source Names) de sistema que dice algo asi como..."si alguien pregunta por unos datos llamados XXX los buscan en el path YYYY".

Ese path al que apunta mi DSN esta en el otro servidor, al que he llamado DBServer, quien tiene Active Directory y es el principal servidor de mi red interna.

En cuanto a lo que me dices que verifique, puedo ver un MMC llamado Active Directory Domains and Trusts en el servidor de la red (DBServer), pero la relación de confianza, si te entiendo bien, debería establecerla desde mi WebServer hacia la de red y lamentablemente en el WebServer no tengo este MMC ya que no tiene instalado Active Directory.

Preguntas:

- ¿Las relaciones de confianza son bilaterales? Es decir, ¿basta con incluirla en un equipo hacia el otro y ya confian mutuamente?

- ¿Te parece que debo montar Active Directory en mi WebServer?

Saludos y de nuevo gracias.
  #7 (permalink)  
Antiguo 31/08/2003, 07:57
Avatar de tania
Colaborador
 
Fecha de Ingreso: agosto-2002
Ubicación: Milano
Mensajes: 4.426
Antigüedad: 22 años, 4 meses
Puntos: 23
Hola


Las relaciones pueden ser bilaterales o unilaterales y no por fuerza deben tener los dos server el active directory, en tu caso el webserver es un miembro de tu lan y esto basta.

De todas formas leyendo mejor tu primer post no creo que esto sea el problema y mas cuando has dicho que ambos server se ven sin problemas.

encontre un sitio que quiza te pueda ayudar......(pero es obvio que ya has buscado informacion!! ) pero por las dudas te lo dejo...

aqui


si ya has buscado todas las respuestas de este tipo y no te resuelven el problema y crees que efectivamente sea cuestion de redes, avisame para que siga hechandole coco al asunto.

ciao
__________________
Evitemos abrir post con títulos "Ayuda..." "Urgente..." le quitan valor a nuestro motor de búsqueda y por otra parte, escribe de manera correcta , quien te lea y quiere ayudarte, no pierde tiempo al descifrar lo que escribiste.
  #8 (permalink)  
Antiguo 31/08/2003, 09:52
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Hola de nuevo.

El link que me has dado (de mi editorial favorita por cierto) contiene lo mismo que he encontrado cientos de veces. El problema es idéntico, pero en la respuesta solo están las instrucciones que de seguro el autor del hilo ya ha hecho.

Es muy curioso que si uno busca en este u otro foro las palabras Access, ODBC y unknown se consigue que este problema ha sido planteado cientos de veces y todos los hilos mueren sin solución.

Pero volviendo a mi caso específico:

Candidatos a estar dando problemas:
1.- Mi programa PHP.
2.- Mi archivo mdb.
3.- La conección ODBC.
4.- La configuración de Windows.
5.- La configuración de la red.

1.- En cuanto a mi programa:
Estoy probando con un script de casi una sola línea, un comando que dice: "conéctate a lo que diga el ODBC llamado "dbPrueba".
- Si el ODBC apunta a una tabla local, el script funciona.
- Si pruebo el script alojado en mi DBServer, y los datos en una de las estaciones de trabajo, funciona correctamente.
Dado lo anterior, creo que mi script no es parte del problema.

2.- En cuanto a mi archivo mdb:
El archivo en cuestión esta en formato Access-97, sin embargo he probado el mismo problema con archivos Access-200 con el mismo resultado.
- He probado con archivos distintos.
- Me he asegurado de que abra correctamente desde Access.
- Me he asegurado de que nadie este usando el archivo.
- Me he asegurado de que no este readonly ni haya un .ldb junto a el.
- Funciona correctamente si esta local.

3.- En cuanto a la conexión ODBC:
He probado variar parámetros como "DSN de Usuario o de Sistema", "con o sin usuario y password", "con o sin readonly", "con o sin Exclusive". He probado tambien definir la conección en base a un disco de red (mapeado al otro servidor) o usando una dirección del tipo \\maquina\path\...
El resultado es el mismo, solo corre si mapeo localmente.

4.- La configuración de Windows:
Ambos son W2K Advanced Server. Ambos estan actualizados.
El servidor DBServer tiene:
- MS Office 2000 SR1 Premiun.
- ADO 2.5
- Jet 4.0

El servidor WebServer tiene:
- MS Office 97 Professional.
- ADO 2.5
- Jet 4.0

5.- La configuración de la red:
- El WebServer no tiene instalado Active Directory y por lo tanto no tiene definido ningún dominio.
- El DBServer tiene un dominio y una carpeta compartida para la data con derechos totales a "everyone".
- El WebServer tiene mapeada dicha carpeta.

Saludos.
  #9 (permalink)  
Antiguo 31/08/2003, 10:45
Avatar de tania
Colaborador
 
Fecha de Ingreso: agosto-2002
Ubicación: Milano
Mensajes: 4.426
Antigüedad: 22 años, 4 meses
Puntos: 23
viendo que mi link no funciono.....

pasemos a la parte de la red....


lo primero es verificar con exactitud los permisos, has dicho que has dado control total a everyone en la carpeta donde esta tu database, pero recuerda que a veces los permisos no se heredan completamente a los files que se encuentran dentro de la carpeta, verifica que tambien en las propiedades del db tengas a everyone y a system con control total, lo mismo para los demas files.

Otra cosa tambien que aqui es importante son los nombres de los servidores es decir quiza puedas tener mapeado tu servidor web como "serverweb" pero en realidad el nombre dns sea pc01web.tudominio.com

por ejemplo has dicho que tu servidor principal es dbserver y es el AD padre del dominio en este caso tendra un nombre "dbserver.tudominio.com" el webserver es miembro del dominio y tendra un nombre "webserver.midominio.com" si es asi quiere decir que ambos se encuentran en el primer nivel del dominio, si tienen nombres diversos entonces puede ser un problema del DNS lo que manda el error cannot open the file '(unknown)' ya que no logra resolver el nombre DNS que has escrito en la path que dices. (si es el caso entonces se comienzarà a ver las zonas de tu dns)


De lo que dije en mi anterior post en el trust de los servers abre la mmc y selecciona el icono que representa el server dbserver y ahi en propiedades si no recuerdo mal (no tengo mi server a la mano) tienes la opcion de buscar a traves de una lista el server al que quieres darle la confianza selecciona a webserver y das ok.


espero tus comentarios

__________________
Evitemos abrir post con títulos "Ayuda..." "Urgente..." le quitan valor a nuestro motor de búsqueda y por otra parte, escribe de manera correcta , quien te lea y quiere ayudarte, no pierde tiempo al descifrar lo que escribiste.
  #10 (permalink)  
Antiguo 01/09/2003, 06:08
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Hola de nuevo Tania.

Mientras verifico lo que me has dicho, te voy a dar un nuevo dato. Hice la prueba de acceder con el mismo script a un archivo MySQL ubicado en el mismo sitio que el archivo mdb, usando MyODBC que es el cliente ODBC para MySQL y funcionó correctamente.

Eso quizás quiera decir que el problema debe estar ubicado entre las versiones de Jet o del mismo DLL de ODBC o versiones de MDAC o problemas internos de Access.

Voy a seguir revisando.

Saludos.
  #11 (permalink)  
Antiguo 01/09/2003, 13:08
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Aqui estoy de nuevo.

Permisos: verificados tanto en la carpeta como en el archivo.

Nombre de los equipos y del dominio: verificados.

En cuanto a los trusts no estoy muy claro. Yo entiendo que si tengo dos redes con Active Directory por ejemplo, si establezco una relación entre ellas podría direccionar ambos dominios, no se si estoy entendiendo mal, pero de ser como yo pienso, no creo que sea lo que yo necesito.

Desde mi WebServer debo poder acceder al exterior usando un DNS, eso esta listo y casualmente esa máquina tiene montado W2K Advanced Server solo por la facilidad de administrar remotamente usando Terminal Server. Bien podría haber sido un Windows 2000 hasta donde tengo entendido.

Desde el otro lada, mi servidor de red que en este hilo estoy llamando DBServer, tengo un dominio, usuarios, permisos y todo eso, pero además tengo una carpeta compartida para que una máquina pegada a ese dominio a través de una segunda tarjeta de red, mi WebServer, tome unos datos.

Es decir, desde el punto de vista de la red, mi WebServer es un equipo mas del dominio, por eso no estoy seguro de tener que establecer Trusts.

¿Estoy en lo correcto?
  #12 (permalink)  
Antiguo 08/09/2003, 10:01
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Luego de cuantiosas pruebas variando una a una las muchas variables que intervienen en mi problema, luego de leer muchísimos enlaces similares donde otros plantean el mismo error sin obtener ninguna solución y sobre todo luego de recibir por varios días la valiosa ayuda de mucha gente entre las que quiero destacar a Tania (gracias Tania), hemos dado con una solución muy simple aunque no definitiva al problema:

Levantando Apache desde la cónsola de comandos la página funciona debidamente.

Lo que sucede en el fondo, me temo, es que cuando levanto a Apache desde la cónsola, tengo un usuario conocido el cual será usado en la seguridad del otro equipo, mientras que al levantarlo como un servicio, debe ser el usuario System (creo yo) quien viaja hasta el otro equipo a pedir datos.

¿Como ponerle derechos al usuario System de otro equipo? ¿El hecho de que System tenga derechos totales en una carpeta implica que el usuario System de CUALQUIER equipo tiene derechos? ¿Son los derechos de la carpeta mi problema o son los derechos a Access? ¿Será este un problema específico del ODBC de Access?

Todo esto para mi es un misterio.

En cuanto consiga un modo de resolver el problema usando Apache como servicio, publicaré en este hilo mi resultado para evitarle a otros el calvario que yo he pasado.

Saludos.

Última edición por Kaopectate; 08/09/2003 a las 10:03
  #13 (permalink)  
Antiguo 02/11/2004, 10:04
 
Fecha de Ingreso: noviembre-2004
Mensajes: 1
Antigüedad: 20 años, 1 mes
Puntos: 0
Busqueda Respuesta al misterio ODBC

Esta situacion me llego a pasar en varias ocasiones dando clase. Mis alumnos intentaban conectar PHP con un ODBC Access y obtenian el mismo error que tu. La solucion no fue tan complicada, basto con colocar su archivo .mdb dentro de una de las carpetas web (htdocs si usas Apache o wwwroot para Internet information server). Claro que aqui la base de datos es un archivo Access... No sé que DBMS estes ocupando, pero muy posiblemente puedas resolverlo sabiendo este antecedente. Suerte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:15.