Как включить специальные распределенные запросы

105

Когда я запускаю запрос с OPENROWSET в SQL Server 2000, он работает.

Но тот же запрос в SQL Server 2008 вызывает следующую ошибку:

SQL Server заблокировал доступ к ЗАЯВЛЕНИЮ «OpenRowset / OpenDatasource» компонента «Специальные распределенные запросы», поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование специальных распределенных запросов с помощью процедуры sp_configure.

аварийный кодер
источник
Кстати, вам лучше прислушаться к предупреждению и изменить свой код SQL, чтобы использовать связанные серверы вместо OPENROWSET.
RBarryYoung
2
@RBarryYoung на самом деле это не "предупреждение" - это просто уведомление о том, что оно не включено. В чем опасность включения этого?
Conrad
1
если злонамеренный пользователь смог куда-то внедрить SQL, включение этой опции может позволить ему исследовать файлы данных по своему выбору. Если вы настроите его как связанный сервер, будут доступны только определенные файлы - связанные серверы (и у вас есть встроенная система безопасности SQL Server, которую вы могли бы использовать, и т. Д.).
Mike M
но мне очень нравится этот вариант для моего внутреннего тестирования и миграции данных ... поэтому ищу, как его снова использовать :)
Майк М.

Ответы:

217

Следующая команда может вам помочь ..

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
Хасиб Хасан Арнаб
источник
14

Вы можете проверить следующую команду

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

SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
     'SELECT GroupName, Name, DepartmentID
      FROM AdventureWorks2012.HumanResources.Department
      ORDER BY GroupName, Name') AS a;
GO

Или эту ссылку на документацию

Феликс Ганьон-Гренье
источник
5
вам нужно добавить «GO» после первого «RECONFIGURE;» в противном случае это идеальное решение
1
разве вам не нужно связывать сервер перед SELECT?
Себастьен Х.
3

Если специальные обновления системного каталога «не поддерживаются» или если вы получаете «Msg 5808», вам необходимо выполнить настройку с переопределением следующим образом:

EXEC sp_configure 'show advanced options', 1
RECONFIGURE with override
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE with override
GO
Робино
источник
2
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
user2129794
источник
Вам не нужно GO после каждой строчки
Роб