Как получить доступ к базе данных через виртуальную папку, которая указывает на удаленный общий ресурс - PullRequest
0 голосов
/ 04 декабря 2008

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

У меня есть веб-страница 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 ]

1 голос
/ 04 декабря 2008

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

Вероятно, ваше сообщение об ошибке является просто общим сообщением об ошибке, а проблема с правами доступа - ваша настоящая проблема.

1 голос
/ 04 декабря 2008

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

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

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

0 голосов
/ 05 декабря 2008

ОБНОВЛЕНИЕ

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

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

0 голосов
/ 04 декабря 2008

Обновление

Я должен также упомянуть, что он работает на моем компьютере (но не один раз загружен до рабочей коробки), если я объявил строку подключения в разделе '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.

0 голосов
/ 04 декабря 2008

убедитесь, что два сервера имеют внутренний доступ друг к другу, а также укажите ip & port db server в строке подключения.

...