如何启用即席分布式查询


105

当我OPENROWSET在SQL Server 2000中运行查询时,它可以工作。

但是,SQL Server 2008中的同一查询会产生以下错误:

SQL Server阻止访问组件“ Ad Hoc Distributed Queries”的STATEMENT“ OpenRowset / OpenDatasource”,因为此组件的安全配置已关闭此组件。系统管理员可以通过使用sp_configure启用“临时分布式查询”的使用


顺便说一句,您最好还是注意警告并更改您的SQL代码以使用链接服务器而不是OPENROWSET。
RBarryYoung

2
@RBarryYoung这并不是真正的“警告”-只是一条通知,指出它未启用。启用此功能有什么危险?
康拉德

1
如果恶意用户能够在某处注入SQL,则打开此选项可能使他们能够探测自己选择的数据文件。如果将其设置为链接服务器,则仅公开特定文件-链接服务器(并且您具有可以使用的集成SQL Server安全性,等等)。
Mike M

但我确实喜欢在内部测试和数据迁移中使用此选项……因此寻找再次使用它的方法:)
Mike M

Answers:


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
您需要在第一个“重新配置”之后添加“开始”;否则,这是一个完美的解决方案

1
SELECT之前不需要链接服务器吗?
Sebastien H.

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

每行之后您都不需要执行
Rob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.