So aktivieren Sie verteilte Ad-hoc-Abfragen


105

Wenn ich eine Abfrage mit OPENROWSETin SQL Server 2000 ausführe , funktioniert dies.

Dieselbe Abfrage in SQL Server 2008 generiert jedoch den folgenden Fehler:

SQL Server hat den Zugriff auf STATEMENT 'OpenRowset / OpenDatasource' der Komponente 'Ad Hoc Distributed Queries' blockiert, da diese Komponente im Rahmen der Sicherheitskonfiguration für diesen Server deaktiviert ist. Ein Systemadministrator kann die Verwendung von verteilten Ad-hoc-Abfragen mithilfe von sp_configure aktivieren


Übrigens sollten Sie die Warnung besser beachten und Ihren SQL-Code so ändern, dass anstelle von OPENROWSET Verbindungsserver verwendet werden.
RBarryYoung

2
@RBarryYoung es ist nicht wirklich eine "Warnung" - es ist nur ein Hinweis, dass es nicht aktiviert ist. Was ist die Gefahr, dies zu ermöglichen?
Conrad

1
Wenn ein böswilliger Benutzer SQL irgendwo einfügen konnte, kann er durch Aktivieren dieser Option Datendateien seiner Wahl prüfen. Wenn Sie es als Verbindungsserver einrichten, werden nur die spezifischen Dateien - Verbindungsserver - verfügbar gemacht (und Sie haben Ihre integrierte SQL Server-Sicherheit, die Sie möglicherweise verwenden usw.).
Mike M

Aber ich mag diese Option für meine internen Tests und Datenmigration ... daher suche ich nach einer erneuten Verwendung :)
Mike M

Antworten:


217

Der folgende Befehl kann Ihnen helfen.

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

14

Sie können den folgenden Befehl überprüfen

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

Oder dieser Dokumentationslink


5
Sie müssen nach der ersten "RECONFIGURE" ein "GO" hinzufügen. Ansonsten ist es eine perfekte Lösung

1
Müssen Sie den Server nicht vor Ihrem SELECT verbinden?
Sebastien H.

3

Wenn Ad-hoc-Aktualisierungen des Systemkatalogs "nicht unterstützt" werden oder wenn Sie eine "Meldung 5808" erhalten, müssen Sie diese mit einer Überschreibung wie folgt konfigurieren:

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

Sie brauchen nicht nach jeder Zeile ein GO
Rob
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.