3

Все,

Я установил Access Database Engine для SQL Server 2008 R2 (с пакетом обновления 1) на многих компьютерах с 64-разрядной операционной системой Windows 7 без каких-либо проблем с правами администратора (и настройкой SQL Server как sa). Я также установил Access Database Engine на компьютере с процессором x86 под управлением Windows 7 и SQL Server 2008 R2 Express Edition (x86) снова без проблем. Тем не менее, когда я пытаюсь настроить Access Database Engine с помощью Developer Edition SQL Server 2008 R2 под x86 Windows 7, он не работает !? Это работает для Express, но не для разработчика. Я попытался полностью переустановить SQL, но все равно он не работает, выдав следующую ошибку:

OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error". 
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)".

Информация о машине (получена из командной строки с именем systeminfo):

OS Name:              Microsoft Windows 7 Professional
OS Version:           6.1.7601 Service Pack 1 Build 7601
OS Configuration:     Standalone workstation
System Type:          X86-based PC
Processor(s):         1 Processor(s) Installed. 
                      [01]: x64 Family 6 Model 42 Stepping 7 GenuineIntel ~2501Mhz

Чтобы настроить Access Engine, успешно установив 32-разрядную версию, я захожу в Management Studio и запускаю следующие запросы:

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO

-- Then each of the following separately.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure

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

SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'J:\Data\thisDir\thatDir\someAccessFile.mdb'; 'admin';'',thisTable);
GO

Этот процесс работает для всех конфигураций, включая SQL Express 2008 R2 (x86 и x64) с Access Database Engine (x86 и x64 соответственно), но для Developer Edition на x86 Windows 7 - нет, почему?

Кто-нибудь сталкивался с этим, кто может дать мне совет, как решить эту проблему?

Большое спасибо за ваше время.

2 ответа2

1

Это происходит из-за разрешений для папки «Сетевая служба», которую SQL-сервер использует для настройки связанного сервера. Чтобы получить доступ к связанному серверу, используя другую учетную запись (при условии, что у вас правильно установлены разрешения для сервера), вам нужно будет сделать следующее:

Откройте проводник Windows и перейдите к следующей папке (внимательно следуйте следующим шагам, поскольку вы сейчас работаете с системными файлами):«C:\Windows\ServiceProfiles\NetworkService\AppData\Local». Этот каталог содержит папку с именем «Temp», щелкните по ней правой кнопкой мыши и выберите «Свойства». В следующем диалоговом окне нажмите вкладку «Безопасность». Если вы видите учетную запись обычного пользователя, которую вы хотите настроить для использования Access Database Engine, это означает, что у нее уже есть некоторые привилегии для этой папки, если ее нет в списке «Группа имен пользователей:», ей нужно быть добавленным В любом случае, нажмите кнопку «Изменить…» под списком «Группа имен пользователей:», откроется диалоговое окно «Разрешения для температуры». Если вам нужно добавить обычного пользователя в группу разрешений, сделайте это с помощью кнопки «Добавить ...», убедившись, что имя учетной записи написано правильно в следующем диалоговом окне «Выбор пользователей или групп». Как только Стандартный пользователь окажется в списке разрешений, выберите этого пользователя и в меню выбора «Разрешения для обычного пользователя» установите флажок «Полный доступ» под столбцом «Разрешить». Нажмите ОК; нажмите OK еще раз, чтобы выйти из этого меню.

Теперь вы сможете запускать запросы доступа как любой пользователь, для которого вы предоставляете разрешения таким образом.

Вам также необходимо убедиться, что вы выполнили следующие запросы в Management Studio, чтобы правильно настроить Access Engine

-- These can be run as one batch.
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    'DynamicParameters', 1 
GO

-- Run each of the following queries individually.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
Reconfigure

Надеюсь, это поможет.

1

В этом посте проблема была с разрешениями для папки Temp:

Мое решение состояло в том, чтобы войти на сервер один раз, используя учетную запись службы для SQL Server. Все работало сразу после этого, и я повторил это на втором сервере.

В другом месте я читал, что для работы Ace и Jet обоим требуется доступ к папкам Temp. Я подозреваю, что вход в систему когда-то был необходим для «подключения» к папке Temp.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .