Activer SQL Server 'xp_cmdshell'

177

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

Mais j'obtiens l'erreur suivante:

SQL Server a bloqué l'accès à la procédure «sys.xp_cmdshell» du composant «xp_cmdshell» 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 «xp_cmdshell» à l'aide de sp_configure. Pour plus d'informations sur l'activation de «xp_cmdshell», consultez «Configuration de la zone de surface» dans la documentation en ligne de SQL Server.

Existe-t-il un moyen d'activer cela ou d'exécuter quelque chose avant d'activer la fonctionnalité?

Comment le résoudre?

edgarmtze
la source

Réponses:

370

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

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
Pero P.
la source
2
Fonctionne vraiment, bien simple et efficace!
indofraiser
2
Assurez-vous d'exécuter SQL Management Studio en tant qu'administrateur
Haim Raman
Merci pour une si grande aide. À la recherche de la solution pendant des jours.
Mohan Rajput
2
sécurité - Activez mais soyez prudent! garder à l'esprit: this
sawyer
39

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
hoggar
la source
19

Serveur de clic droit -> Facettes -> Configuration de la zone de surface -> XPCmshellEnbled -> true entrez la description de l'image ici

Arnav
la source
9

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

De plus, si vous souhaitez conserver les valeurs précédentes, vous pouvez les lire en sys.configurationspremier, puis les appliquer dans l'ordre inverse à la fin. Nous pouvons également éviter les reconfigureappels inutiles :

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 SQL Server version 2005 ou ultérieure (la question d'origine était pour 2008).

Geoff
la source
4

Bien que la réponse acceptée fonctionne la plupart du temps, j'ai rencontré (je ne sais toujours pas pourquoi) certains cas qui ne le sont pas. Une légère modification de la requête en utilisant WITH OVERRIDEin RECONFIGUREdonne 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 «afficher les options avancées» est passée de 0 à 1. Exécutez l'instruction RECONFIGURE pour installer.
L'option de configuration 'xp_cmdshell' est passée de 0 à 1. Exécutez l'instruction RECONFIGURE pour installer.

Athafoud
la source
4

Même si cette question est résolue, je veux ajouter mon conseil à ce sujet .... car en tant que développeur, j'ai ignoré.

Il est important de savoir que nous parlons de MSSQL xp_cmdshell activé est critique pour la sécurité, comme indiqué dans le message d'avertissement:

Blockquote SQL Server a bloqué l'accès à la procédure 'sys.xp_cmdshell' du composant 'xp_cmdshell' car ce composant est désactivé dans le cadre de la configuration de sécurité de ce serveur. [...]

Laisser le service activé est une sorte de faiblesse , qui par exemple dans une application Web pourrait refléter et exécuter des commandes SQL d'un attaquant. Le populaire CWE-89 : SQL Injectioncela pourrait être une faiblesse de notre logiciel, et donc ce type de scénarios pourrait ouvrir la voie à d'éventuelles attaques, telles que CAPEC-108 :Command Line Execution through SQL Injection

J'espère avoir fait quelque chose d'agréable, nous les développeurs et les ingénieurs faisons les choses avec conscience et nous serons plus en sécurité!

scieur
la source
0

Pour moi, le seul moyen sur SQL 2008 R2 était le suivant:

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**
David Bru
la source
-1

Vous pouvez le faire en utilisant SQLcmd. vous avez exécuté la commande suivante. entrez la description de l'image ici

Arnav
la source
2
Pouvez-vous montrer en quoi cette réponse est différente des autres réponses à cette question. Veuillez également utiliser un bloc de code pour votre code au lieu d'une capture d'écran.
Athafoud
c: \> sqlcmd -S. -E 1) EXEC sp_con \
arnav