Comment activer les requêtes distribuées ad hoc

105

Lorsque j'exécute une requête avec OPENROWSET dans SQL Server 2000, cela fonctionne.

Mais la même requête dans SQL Server 2008 génère l'erreur suivante:

SQL Server a bloqué l'accès à STATEMENT 'OpenRowset / OpenDatasource' du composant 'Ad Hoc Distributed Queries' car ce composant est désactivé dans le cadre de la configuration de sécurité de ce serveur. Un administrateur système peut activer l'utilisation de «requêtes distribuées ad hoc» à l'aide de sp_configure

codeur d'urgence
la source
Au fait, vous feriez mieux de tenir compte de l'avertissement et de modifier votre code SQL pour utiliser des serveurs liés au lieu d'OPENROWSET.
RBarryYoung
2
@RBarryYoung ce n'est pas vraiment un "avertissement" - c'est juste un avis disant qu'il n'est pas activé. Quel est le danger de permettre cela?
Conrad le
1
si un utilisateur malveillant pouvait injecter du SQL quelque part, l'activation de cette option pourrait lui permettre de sonder les fichiers de données de son choix. Si vous le configurez en tant que serveur lié, seuls les fichiers spécifiques - serveurs liés - sont exposés (et vous disposez de votre sécurité SQL Server intégrée que vous pourriez utiliser, etc.).
Mike M
mais j'aime cette option pour mes tests internes et la migration de données ... donc je cherche comment l'utiliser à nouveau :)
Mike M

Réponses:

217

La commande suivante peut vous aider.

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

Vous pouvez vérifier la commande suivante

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 ce lien de documentation

Félix Gagnon-Grenier
la source
5
vous devez ajouter un 'GO' après le 1er 'RECONFIGURE;' sinon c'est une solution parfaite
1
n'avez-vous pas besoin de lier le serveur avant votre SELECT?
Sebastien H.
3

Si les mises à jour ad hoc du catalogue système ne sont "pas prises en charge", ou si vous obtenez un "Msg 5808", vous devrez configurer avec un remplacement comme ceci:

EXEC sp_configure 'show advanced options', 1
RECONFIGURE with override
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE with override
GO
Robino
la source
2
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
user2129794
la source
Vous n'avez pas besoin d'un GO après chaque ligne
Rob