187 votes

Activer 'xp_cmdshell' sur le serveur SQL

Je veux exécuter EXEC master..xp_cmdshell @bcpquery

Mais j'obtiens l'erreur suivante :

Le serveur SQL a bloqué l'accès à la procédure 'sys.xp_cmdshell' du composant 'xp_cmdshell' car ce composant est désactivé dans la configuration de sécurité de ce serveur. Un administrateur système peut activer l'utilisation de 'xp_cmdshell' en utilisant sp_configure. Pour plus d'informations sur l'activation de 'xp_cmdshell', voir "Surface Area Configuration" dans SQL Server Books Online.

Y a-t-il un moyen d'activer cette fonction, ou d'exécuter quelque chose avant de l'activer ?

Comment le résoudre ?

391voto

pero Points 7952

Vous devez l'activer. Consultez la section Permission de la page xp_cmdshell docs MSDN :

http://msdn.microsoft.com/en-us/library/ms190693.aspx :

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

2 votes

Fonctionne vraiment, bien simple et efficace !

2 votes

Assurez-vous que vous exécutez SQL Management Studio en tant qu'administrateur.

0 votes

Merci pour cette aide précieuse. J'ai cherché la solution pendant des jours.

40voto

hoggar Points 247

Vous pouvez également masquer à nouveau l'option avancée après la reconfiguration :

-- show advanced options
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
-- enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
-- hide advanced options
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

19voto

dinesh vishe Points 1309

Clic droit sur le serveur -->Facettes-->Configuration de la surface -->XPCmshellEnbled -->true enter image description here

10voto

Geoff Points 3094

Comme indiqué dans d'autres réponses, l'astuce (dans SQL 2005 ou une version ultérieure) consiste à modifier les paramètres de configuration globale pour les éléments suivants show advanced options y xp_cmdshell a 1 dans cet ordre.

De plus, si vous voulez conserver les valeurs précédentes, vous pouvez les lire à partir de sys.configurations d'abord, puis les appliquer en ordre inverse à la fin. Nous pouvons également éviter les reconfigure appels :

declare @prevAdvancedOptions int
declare @prevXpCmdshell int

select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 1
    reconfigure
end

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 1
    reconfigure
end

/* do work */

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 0
    reconfigure
end

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 0
    reconfigure
end

Notez que cela repose sur la version 2005 ou ultérieure de SQL Server (la question initiale portait sur la version 2008).

5voto

Athafoud Points 2068

Bien que la réponse acceptée fonctionne la plupart du temps, j'ai rencontré (je ne sais toujours pas pourquoi) des cas où elle ne fonctionne pas. Une légère modification de la requête en utilisant l'option WITH OVERRIDE en RECONFIGURE donne la solution

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

Le résultat attendu est

L'option de configuration 'show advanced options' est passée de 0 à 1. Exécutez l'instruction RECONFIGURE pour l'installation.
L'option de configuration 'xp_cmdshell' est passée de 0 à 1. Exécutez l'instruction RECONFIGURE pour l'installation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X