วิธีเปิดใช้งาน Ad Hoc Distributed Queries


105

เมื่อฉันเรียกใช้แบบสอบถามOPENROWSETใน SQL Server 2000 มันใช้งานได้

แต่แบบสอบถามเดียวกันใน SQL Server 2008 สร้างข้อผิดพลาดต่อไปนี้:

SQL Server บล็อกการเข้าถึง STATEMENT 'OpenRowset / OpenDatasource' ของคอมโพเนนต์ 'Ad Hoc Distributed Queries' เนื่องจากคอมโพเนนต์นี้ถูกปิดเป็นส่วนหนึ่งของการกำหนดค่าความปลอดภัยสำหรับเซิร์ฟเวอร์นี้ ผู้ดูแลระบบสามารถเปิดใช้งาน'Ad Hoc Distributed Queries'โดยใช้sp_configure


อย่างไรก็ตามคุณควรปฏิบัติตามคำเตือนและเปลี่ยนรหัส SQL ของคุณเพื่อใช้เซิร์ฟเวอร์ที่เชื่อมโยงแทน OPENROWSET
RBarryYoung

2
@RBarryYoung ไม่ใช่ "คำเตือน" จริงๆ - เป็นเพียงการแจ้งเตือนว่าไม่ได้เปิดใช้งาน อะไรคืออันตรายของการเปิดใช้งานสิ่งนี้?
Conrad

1
หากผู้ใช้ที่ประสงค์ร้ายสามารถฉีด SQL ที่ใดที่หนึ่งได้การเปิดตัวเลือกนี้อาจทำให้พวกเขาสามารถตรวจสอบไฟล์ข้อมูลที่ตนเลือกได้ หากคุณตั้งค่าเป็นเซิร์ฟเวอร์ที่เชื่อมโยงระบบจะเปิดเผยเฉพาะไฟล์เฉพาะ - เซิร์ฟเวอร์ที่เชื่อมโยง - เท่านั้นที่จะเปิดเผย (และคุณมีการรักษาความปลอดภัยเซิร์ฟเวอร์ SQL ในตัวที่คุณสามารถใช้งานได้ ฯลฯ )
Mike M

แต่ฉันชอบตัวเลือกนี้สำหรับการทดสอบภายในและการย้ายข้อมูล ... ดังนั้นกำลังมองหาวิธีใช้อีกครั้ง :)
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 มิฉะนั้นจะเป็นโซลูชันที่สมบูรณ์แบบ

1
คุณไม่จำเป็นต้องเชื่อมโยงเซิร์ฟเวอร์ก่อนที่จะเลือก?
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

คุณไม่จำเป็นต้อง GO หลังจากทุกบรรทัด
Rob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.