Como habilitar consultas distribuídas ad hoc

105

Quando executo uma consulta OPENROWSETno SQL Server 2000, ele funciona.

Mas a mesma consulta no SQL Server 2008 gera o seguinte erro:

O SQL Server bloqueou o acesso a STATEMENT 'OpenRowset / OpenDatasource' do componente 'Ad Hoc Distributed Queries' porque este componente está desativado como parte da configuração de segurança para este servidor. Um administrador de sistema pode habilitar o uso de 'Consultas Distribuídas Ad Hoc' usando sp_configure

codificador de emergência
fonte
A propósito, seria melhor você prestar atenção ao aviso e alterar seu código SQL para usar servidores vinculados em vez de OPENROWSET.
RBarryYoung
2
@RBarryYoung não é realmente um "aviso" - é apenas um aviso dizendo que não está habilitado. Qual é o perigo de habilitar isso?
Conrad
1
se um usuário mal-intencionado conseguiu injetar SQL em algum lugar, ativar essa opção poderia permitir que ele investigasse os arquivos de dados de sua escolha. Se você configurá-lo como um servidor vinculado, apenas os arquivos específicos - servidores vinculados - são expostos (e você tem a segurança integrada do SQL Server que pode estar usando, etc.).
Mike M
mas eu gosto dessa opção para meus testes internos e migração de dados ... portanto, estou procurando como usá-la novamente :)
Mike M

Respostas:

217

O seguinte comando pode ajudá-lo.

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
Hasib Hasan Arnab
fonte
14

Você pode verificar o seguinte comando

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

Ou este link de documentação

Félix Gagnon-Grenier
fonte
5
você precisa adicionar um 'GO' após o primeiro 'RECONFIGURE;' caso contrário, é uma solução perfeita
1
você não precisa vincular o servidor antes de seu SELECT?
Sebastien H.
3

Se as atualizações ad hoc do catálogo do sistema "não forem suportadas" ou se você receber uma "Msg 5808", será necessário configurar com substituição como esta:

EXEC sp_configure 'show advanced options', 1
RECONFIGURE with override
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE with override
GO
Robino
fonte
2
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
user2129794
fonte
Você não precisa de um GO após cada linha
Rob