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


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

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


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

2
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

Nie potrzebujesz GO po każdej linii
Rob
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.