Aktivieren Sie den SQL Server 'xp_cmdshell'


176

Ich möchte ausführen EXEC master..xp_cmdshell @bcpquery

Aber ich bekomme folgenden Fehler:

SQL Server hat den Zugriff auf die Prozedur 'sys.xp_cmdshell' der Komponente 'xp_cmdshell' blockiert, da diese Komponente im Rahmen der Sicherheitskonfiguration für diesen Server deaktiviert ist. Ein Systemadministrator kann die Verwendung von 'xp_cmdshell' mithilfe von sp_configure aktivieren. Weitere Informationen zum Aktivieren von 'xp_cmdshell' finden Sie unter "Oberflächenkonfiguration" in den SQL Server-Onlinedokumenten.

Gibt es eine Möglichkeit, dies zu aktivieren oder etwas auszuführen, bevor die Funktion aktiviert wird?

Wie man es löst?

Antworten:


369

Sie müssen es aktivieren. Überprüfen Sie den Abschnitt Berechtigung in den MSDN-Dokumenten zu 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

2
Funktioniert wirklich einfach und effektiv!
Indofraiser

2
Stellen Sie sicher, dass Sie SQL Management Studio als Administrator ausführen
Haim Raman

Vielen Dank für diese großartige Hilfe. Seit Tagen auf der Suche nach der Lösung.
Mohan Rajput

2
Sicherheit - Aktivieren, aber vorsichtig sein! Denken Sie daran: this
sawyer

39

Sie können die erweiterte Option nach der Neukonfiguration auch wieder ausblenden:

-- 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

18

Klicken Sie mit der rechten Maustaste auf Server -> Facetten -> Oberflächenkonfiguration -> XPCmshellEnbled -> true Geben Sie hier die Bildbeschreibung ein


9

Wie in anderen Antworten aufgelistet, ist der Trick (in SQL 2005 oder später) die globalen Konfigurationseinstellungen zu ändern show advanced optionsund xp_cmdshellzu 1in dieser Reihenfolge.

Wenn Sie die vorherigen Werte beibehalten möchten, können Sie sie sys.configurationszuerst lesen und am Ende in umgekehrter Reihenfolge anwenden. Wir können auch unnötige reconfigureAnrufe vermeiden :

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

Beachten Sie, dass dies auf SQL Server Version 2005 oder höher beruht (ursprüngliche Frage war für 2008).


4

Während die akzeptierte Antwort die meiste Zeit funktioniert, bin ich auf einige Fälle gestoßen (weiß immer noch nicht warum), die dies nicht tun. Eine geringfügige Änderung der Abfrage mithilfe von WITH OVERRIDEin RECONFIGUREergibt die Lösung

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

Die erwartete Ausgabe ist

Die Konfigurationsoption 'Erweiterte Optionen anzeigen' wurde von 0 auf 1 geändert. Führen Sie die zu installierende Anweisung RECONFIGURE aus.
Die Konfigurationsoption 'xp_cmdshell' wurde von 0 auf 1 geändert. Führen Sie die zu installierende Anweisung RECONFIGURE aus.


4

Auch wenn diese Frage gelöst ist, möchte ich meinen Rat dazu hinzufügen ... da ich als Entwickler ignoriert habe.

Es ist wichtig zu wissen, dass es sich um MSSQL handelt. Xp_cmdshell aktiviert ist für die Sicherheit von entscheidender Bedeutung, wie in der Warnmeldung angegeben:

Blockquote SQL Server hat den Zugriff auf die Prozedur 'sys.xp_cmdshell' der Komponente 'xp_cmdshell' blockiert, da diese Komponente im Rahmen der Sicherheitskonfiguration für diesen Server deaktiviert ist . [...]

Das Aktivieren des Dienstes ist eine Art Schwachstelle , die beispielsweise in einer Web-App die SQL-Befehle eines Angreifers widerspiegeln und ausführen kann. Das beliebte CWE-89 : SQL InjectionEs könnte eine Schwäche in unserer Software sein, und daher könnten solche Szenarien den Weg für mögliche Angriffe wie CAPEC-108 ebnen :Command Line Execution through SQL Injection

Ich hoffe, etwas Angenehmes getan zu haben, wir Entwickler und Ingenieure tun Dinge mit Bewusstsein und wir werden sicherer sein!


0

Für mich war der einzige Weg unter SQL 2008 R2 folgender:

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**

-1

Sie können SQLcmd verwenden. Sie haben den folgenden Befehl ausgeführt. Geben Sie hier die Bildbeschreibung ein


2
Können Sie zeigen, wie sich diese Antwort von den anderen Antworten auf diese Frage unterscheidet? Verwenden Sie außerdem einen Codeblock für Ihren Code anstelle eines Screenshots.
Athafoud

c: \> sqlcmd -S. -E 1) EXEC sp_con \
Arnav
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.