¿Cómo accedo a la base de datos a través de una carpeta virtual que apunta a un recurso compartido remoto?

StackOverflow https://stackoverflow.com/questions/339663

Pregunta

Tengo problemas para obtener acceso a una base de datos que vive en un servidor remoto.

Tengo una página web ASP.NET 2.0 que intenta conectarse a una base de datos.
Se accede a la base de datos a través de una carpeta virtual (que configuré en IIS).
La carpeta virtual apunta a un recurso compartido remoto que contiene la base de datos.

La carpeta virtual (en el directorio raíz de aplicaciones web) apunta a un recurso compartido en un servidor remoto a través de una ruta UNC:

\\databaseServerName\databaseFolder$\ 

La carpeta virtual tiene los permisos 'leer' y 'examinar' establecidos en 'verdadero'.

Almaceno la cadena de conexión en la sección 'appSettings' de web.config:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=http://webAppServerName/virtualFolderName/databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

El objeto de conexión es declard en mi página .aspx:

Dim objConnVirtual As New OleDbConnection(ConfigurationManager.AppSettings("conStrVirtual"))

Aquí está el código que intenta usar el objeto de conexión:

Public Sub Test()
    If objConnVirtual.State <> ConnectionState.Open Then
        objConnVirtual.Open()
    End If
    Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM TableName", objConnVirtual)
    objDR = cmd.ExecuteReader()
    If objDR.Read() Then
        response.write("Shazaam! Data shows up here")
    End If
    objDR.Close()
    objConnVirtual.Close()
End Sub

Cuando ejecuto el código anterior, aparece el siguiente error (en esta línea del código 'objConnVirtual.Open ()':
Detalles de la excepción: System.Data.OleDb.OleDbException: No es un nombre de archivo válido.

Verifiqué el nombre de la base de datos y es correcto (incluso lo copié / pegué para asegurarme)

Si pongo la sección 'Fuente de datos' de la cadena de conexión en la barra de direcciones de mi navegador, puedo ver con éxito el contenido del recurso compartido en el servidor remoto.

No estoy seguro si esto es un problema con los permisos o con el código.
He buscado en Google esta mierda pero no he podido encontrar una solución.

Cualquier ayuda es muy apreciada.

¿Fue útil?

Solución 5

ACTUALIZACIÓN

Primero, gracias a todos los que enviaron respuestas.

Sin embargo, terminamos no usando el método 'conectar a base de datos remota a través de una carpeta virtual' porque la complejidad de los permisos necesarios para que esto funcione nos causaba más problemas de los que valía la pena. Volvemos a colocar la ruta UNC en la cadena de conexión, que puede no ser la mejor manera de hacerlo, pero está funcionando para nosotros.

Otros consejos

Al acceder a una base de datos de Access MDB remota, debe especificar una ruta UNC como \\ remoteMachine \ Share \ test.mdb.

Asegúrese de que la identidad de su grupo de aplicaciones tenga los permisos correctos para conectarse al recurso compartido remoto. De forma predeterminada en IIS 6, está trabajando con la cuenta del Servicio de red, que de forma predeterminada no tiene permiso para acceder a un recurso compartido remoto.

La mejor manera es dejar que el AppPool se ejecute con un usuario de servicio dedicado.

¿Cuál es la cuenta que se utiliza en su servidor cuando su aplicación web intenta leer el archivo db? Cualquiera que sea esta cuenta de usuario, debe tener permisos para leer esa carpeta / archivo. En IIS6 puede configurar la carpeta virtual para usar cualquier cuenta de usuario ... en la pestaña Seguridad de directorio hay un botón Editar debajo de Autenticación y control de acceso.

Parece probable que su mensaje de error sea solo un mensaje de error genérico, y el problema de los permisos es su problema real.

asegúrese de que los dos servidores tengan acceso interno entre sí y también especifique la ip & amp; puerto del servidor db en su cadena de conexión.

Actualizar

También debo mencionar que funciona en mi máquina ( pero no una vez cargado en el cuadro de producción) si declaro la cadena de conexión en la sección 'appSettings' de web.config de esta manera:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=\\databaseServerName\databaseFolder$\databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

Esto me lleva a pensar que podría ser un problema con la necesidad de utilizar credenciales de dominio que no sean la cuenta IUSER local.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top