Справка по ошибке SQL Server «специальный доступ к поставщику OLE DB« Microsoft.ACE.OLEDB.12.0 »»

8

Таким образом, у нас есть интересная проблема, когда пользователи получают следующую ошибку при попытке запроса представления в SQL Server 2008 R2:

Сообщение 7415, уровень 16, состояние 1, строка 1 В специальном доступе к поставщику OLE DB «Microsoft.ACE.OLEDB.12.0» отказано. Вы должны получить доступ к этому провайдеру через связанный сервер.

Исследуя эту проблему, я обнаружил, что в нескольких статьях перечисляются изменения параметров OPENROWSET, значений реестра, AdHoc DIstributed Queries и т. Д. (Ссылки на статьи ниже).

http://www.johnsoer.com/blog/?p=538

http://www.remotedbaexperts.com/Blog/dba_tips/2010/09/ad-hoc-access-to-ole-db-provider-microsoft-ace-oledb-12-0-has-been-denied/

Мы по-прежнему получаем сообщение об ошибке после выполнения действий, указанных в ссылках выше.

Предостережение заключается в том, что когда мы создали тестовую учетную запись и дали ее sa - она ​​работала очень хорошо. Мои коллеги с правами администратора также могут выполнить запрос без проблем.

Этот запрос подается из локального файла Excel на сервер, на котором размещен этот экземпляр.

Кто-нибудь знает какие-либо другие исправления на 2008 год?

Johnny Boy
источник

Ответы:

10

У меня вчера была такая же проблема, и вот как я смог ее решить:

Хотя «Запретить доступ по запросу» не включен на странице «Параметры поставщика» (SQL Server Management Studio),

введите описание изображения здесь

Реестр не имеет ключа DisallowadHocAccess = 0, и по какой-то причине он требуется там.

введите описание изображения здесь

После того, как я добавил ключ в реестр, я смог запустить Query с пользователем без прав администратора.

введите описание изображения здесь

NTOM
источник
8
  1. Определите, включен ли «Запретить доступ adhoc» для вашего провайдера. Это можно найти в SQL Management Studio по следующему пути навигации:

  2. Объекты сервера / Связанные серверы / Провайдеры / Microsoft.ACE.OLEDB.12.0

  3. Щелкните правой кнопкой мыши поставщика «Microsoft.ACE.OLEDB.12.0» и выберите «Свойства» в контекстном меню.

  4. Во всплывающем окне убедитесь, что флажок «Disallow adhoc access» снят.

Кроме того, вы можете просто отключить его, используя следующий SQL:

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE

Затем убедитесь, что ключ реестра установлен. В Regedit перейдите следующим образом:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQLServer\MSSQL<major version>_<minor version>.<instance name>\Providers\Microsoft.ACE.OLEDB.12.0]
"DisallowAdhocAccess"=dword:00000000

Примечание. У вас может не быть имени экземпляра, если вы используете экземпляр по умолчанию.

Еще одно примечание: вы можете скопировать и вставить это в .regфайл, чтобы установить ключ.

Ключевой момент : по моему опыту, вам нужен только ключ реестра, если пользователь, обращающийся к базе данных, не является администратором или владельцем. Таким образом, средам с высоким уровнем безопасности потребуется этот раздел реестра.

Слогмейстер экстраординарный
источник
Я отправил этот ответ, потому что у другого ответа были изображения, которые я не мог видеть, потому что они заблокированы на моем рабочем месте. Пожалуйста, не используйте изображения без крайней необходимости!
Слогмейстер Extraordinaire
Добавление ключа реестра работало для меня; через GUI нет.
Тим
0

Для меня убедитесь, что у вас есть раздел реестра с именем «DisallowAdhocAccess», значение = 0 в [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _. \ Providers \ Microsoft.ACE.OLEDB.12.0]. Если его не существует, создайте его.

Хоанг Тран
источник