Как получить доступ к базе данных через виртуальную папку, которая указывает на удаленный общий ресурс

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

Вопрос

У меня проблема с получением доступа к базе данных, которая находится на удаленном сервере.

У меня есть веб-страница ASP.NET 2.0, которая пытается подключиться к базе данных.
Доступ к базе данных осуществляется через виртуальную папку (которую я настроил в IIS).
Виртуальная папка указывает на удаленный общий ресурс, который содержит базу данных.

Виртуальная папка (в корневом каталоге веб-приложений) указывает на общий ресурс на удаленном сервере по пути UNC:

\\databaseServerName\databaseFolder$\ 

Виртуальная папка имеет права «чтение» и «просмотр», для которых установлено значение «истина».

Я храню строку подключения в разделе appSettings файла web.config:

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

Объект подключения объявлен на моей странице .aspx:

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

Вот код, который пытается использовать объект подключения:

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

Когда я запускаю приведенный выше код, я получаю следующую ошибку (в этой строке кода 'objConnVirtual.Open ()':
Сведения об исключении: System.Data.OleDb.OleDbException: недопустимое имя файла.

Я проверил имя базы данных, и оно правильное (даже скопируйте / вставьте его, чтобы убедиться)

Если я поместил раздел «Источник данных» строки подключения в адресную строку моего браузера, я смогу успешно увидеть содержимое общего ресурса на удаленном сервере.

Не уверен, что это проблема с разрешениями или с кодом.
Я нашел это дерьмо, но не смог найти решение.

Любая помощь очень ценится.

Это было полезно?

Решение 5

ОБНОВЛЕНИЕ

Прежде всего, спасибо всем, кто прислал ответы.

Однако в итоге мы не использовали метод «подключиться к удаленной базе данных через виртуальную папку», поскольку сложность разрешений, необходимых для того, чтобы это работало, вызывала у нас больше проблем, чем оно того стоило. Мы помещаем путь UNC обратно в строку подключения, что, возможно, не лучший способ сделать это, но работает для нас.

Другие советы

При доступе к базе данных удаленного доступа MDB необходимо указать UNC-путь, например \\ remoteMachine \ Share \ test.mdb.

Убедитесь, что у удостоверения пула приложений есть необходимые разрешения для подключения к удаленному общему ресурсу. По умолчанию в IIS 6 вы работаете с учетной записью сетевой службы, которой по умолчанию не разрешен доступ к удаленному общему ресурсу.

Лучший способ - запустить AppPool с выделенным пользователем службы.

Какая учетная запись используется на вашем сервере, когда ваше веб-приложение пытается прочитать файл БД? Какой бы ни была эта учетная запись пользователя, у нее должны быть разрешения на чтение этой папки / файла. В IIS6 вы можете настроить виртуальную папку для использования любой учетной записи пользователя ... на вкладке Безопасность каталога есть кнопка Изменить под Аутентификацией и контролем доступа.

Вполне вероятно, что ваше сообщение об ошибке является просто общим сообщением об ошибке, и проблема с разрешениями является вашей реальной проблемой.

убедитесь, что оба сервера имеют внутренний доступ друг к другу, а также укажите ip & amp; порт сервера базы данных в строке подключения.

Обновление

Следует также упомянуть, что он работает на моей машине ( но не один раз загружается в рабочий ящик), если я объявлю строку подключения в разделе 'appSettings' файла web.config следующим образом:

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

Это заставляет меня думать, что это может быть связано с необходимостью использования учетных данных домена, отличных от локальной учетной записи IUSER.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top