Jak włączyć zapytania rozproszone ad hoc

105

Kiedy uruchamiam zapytanie OPENROWSETw SQL Server 2000, to działa.

Ale to samo zapytanie w programie SQL Server 2008 generuje następujący błąd:

SQL Server zablokował dostęp do STATEMENT „OpenRowset / OpenDatasource” składnika „Ad Hoc Distributed Queries”, ponieważ ten składnik jest wyłączony w ramach konfiguracji zabezpieczeń dla tego serwera. Administrator systemu może włączyć korzystanie z „kwerend rozproszonych ad hoc” przy użyciu sp_configure

koder awaryjny
źródło
Nawiasem mówiąc, lepiej byłoby posłuchać ostrzeżenia i zmienić kod SQL tak, aby używał serwerów połączonych zamiast OPENROWSET.
RBarryYoung
2
@RBarryYoung to nie jest tak naprawdę „ostrzeżenie” - to tylko informacja, że ​​nie jest włączona. Jakie jest niebezpieczeństwo włączenia tego?
Conrad
1
jeśli złośliwy użytkownik byłby w stanie gdzieś wstrzyknąć SQL, włączenie tej opcji mogłoby pozwolić mu na sondowanie wybranych przez siebie plików danych. Jeśli skonfigurujesz go jako serwer połączony, tylko określone pliki - serwery połączone - zostaną ujawnione (i masz zintegrowane zabezpieczenia serwera SQL, z których możesz korzystać itp.).
Mike M
ale podoba mi się ta opcja dla moich wewnętrznych testów i migracji danych ... stąd szukam, jak z niej ponownie skorzystać :)
Mike M

Odpowiedzi:

217

Następujące polecenie może ci pomóc ...

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
Hasib Hasan Arnab
źródło
14

Możesz sprawdzić następujące polecenie

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

Lub ten link do dokumentacji

Félix Gagnon-Grenier
źródło
5
musisz dodać 'GO' po pierwszym 'RECONFIGURE;' w przeciwnym razie jest to idealne rozwiązanie
1
czy nie musisz łączyć serwera przed SELECT?
Sebastien H.
3

Jeśli aktualizacje ad hoc katalogu systemowego są „nieobsługiwane” lub jeśli otrzymasz „Msg 5808”, musisz skonfigurować zastąpienie w następujący sposób:

EXEC sp_configure 'show advanced options', 1
RECONFIGURE with override
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE with override
GO
Robino
źródło
2
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
user2129794
źródło
Nie potrzebujesz GO po każdej linii
Rob