如何启用即席分布式查询

How to enable Ad Hoc Distributed Queries

提问人:emergency coder 提问时间:1/27/2013 最后编辑:Aaron Bertrandemergency coder 更新时间:11/19/2023 访问量:265690

问:

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

但是 SQL Server 2008 中的相同查询会生成以下错误:

SQL Server 阻止了对组件“Ad Hoc Distributed Queries”的 STATEMENT “OpenRowset/OpenDatasource” 的访问,因为此组件作为此服务器安全配置的一部分处于关闭状态。系统管理员可以通过以下方式启用“Ad Hoc Distributed Queries”sp_configure

SQL 服务器 2008

评论

0赞 RBarryYoung 1/27/2013
顺便说一句,你最好注意警告,并将你的SQL代码更改为使用链接服务器而不是OPENROWSET。
2赞 Conrad 6/4/2014
@RBarryYoung这并不是真正的“警告”——它只是一个通知,说它没有被启用。启用此功能有什么危险?
1赞 Mike M 9/25/2016
如果恶意用户能够在某处注入 SQL,则打开此选项可以允许他们探测他们选择的数据文件。如果将其设置为链接服务器,则仅公开特定文件(链接服务器)(并且具有可以使用的集成 SQL Server 安全性等)。
0赞 Mike M 9/25/2016
但我确实喜欢这个选项用于我的内部测试和数据迁移......因此,寻找如何再次使用它:)
0赞 rinilnath 6/12/2023
这被称为漏洞,但有没有其他方法可以实现这一目标?

答:

253赞 Hasib Tarafder 1/27/2013 #1

以下命令可能会对您有所帮助。

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

评论

3赞 cusman 11/16/2020
唯一缺少的是您应该将“显示高级选项”更改回 0
17赞 user1977878 1/28/2013 #2

您可以检查以下命令

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赞 8/30/2013
您需要在第一个“重新配置”之后添加一个“GO”,否则这是一个完美的解决方案
1赞 Sebastien H. 3/21/2014
您不需要在 SELECT 之前链接服务器吗?
3赞 user2129794 6/17/2013 #3
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

评论

2赞 Rob 8/19/2015
您不需要在每行之后都加上 GO
5赞 Robino 1/27/2017 #4

如果“不支持”对系统目录的临时更新,或者如果收到“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