Netto-Stopp <service> Systemfehler 5 Zugriff verweigert </service>

2139
Sjef

Ab SQL Server 2012 versuche ich Folgendes:

DECLARE @COMMAND nvarchar(4000) SET @COMMAND = 'net stop <servicename>' exec master.dbo.xp_cmdshell @COMMAND 

Ich bekomme Systemfehler 5 und Zugriff als Antwort verweigert

Das Dienstkonto (geprüft mit whoami) wird zu den Administratoren hinzugefügt. Was kann sonst noch falsch sein?

1
Wenn Sie "From SQLServer 2012" verwenden, meinen Sie SQLServer Management Studio (ssms.exe)? Frank Thomas vor 6 Jahren 0
Ja, wenn ich den Befehl (die Befehle) in eine .bat- oder .cmd-Datei stecke und das vom Betriebssystem aus ausführen würde, ist das in Ordnung. Wenn ich versuche, es von ssms aus auszuführen, erhalte ich dieselbe Fehlermeldung. Sjef vor 6 Jahren 0
Führen Sie ssms als Administrator aus. Frank Thomas vor 6 Jahren 0

2 Antworten auf die Frage

0
LPChip

Führen Sie SQL Server 2012 als Administrator aus, und das Problem wird behoben.

Das erwähnte Dienstkonto verfügt über Administratorrechte. Sjef vor 6 Jahren 0
Ja, aber trotzdem muss die Laufzeit als Administrator ausgeführt werden. Sie müssen mit der rechten Maustaste auf das Programm klicken und als Administrator ausführen auswählen, um der Anwendung zusätzliche Rechte zu gewähren. Das gleiche Verhalten wird angezeigt, wenn Sie versuchen, den Befehl in einem Eingabeaufforderungsfenster auszuführen. Selbst wenn Ihr Benutzer über Administratorrechte verfügt, funktioniert es erst, wenn Sie als Administrator die Eingabeaufforderung starten. Es ist eine UAC-Sache. LPChip vor 6 Jahren 0
In diesem Fall spielt der Benutzer, der den DB-Dienst ausführt, keine Rolle für das Problem. Das Problem ist, wer den Dienst KONTROLLIEREN kann, indem er den Dienst startet / stoppt / bearbeitet. SQL Injection-Angriffe wären verheerend, wenn nur ein alter Benutzer xp_cmdshell ausführen könnte und aufgrund des privilegierten Zugriffs auf SQLServers beliebige Befehle als Serveradministrator ausführen kann. Frank Thomas vor 6 Jahren 0
0
Pimp Juice IT

Erlauben Sie dem Benutzer ohne xp_cmdshellSystemadministrator die Ausführung von SSMS

Ich half bei der Behebung eines Problems, bei dem wir einem App-Entwickler Zugriff gewähren mussten, um xp_cmdshellinnerhalb einer SSMS-Sitzung ausgeführt zu werden, anstatt " Ausführen als " von SQL Agent Job auf einem nicht kritischen Entwicklungsserver auszuführen, ohne ihn zu einem Sysadmin in der SQL Server-Instanz zu machen.

Was wir gemacht haben

Hinweis: Das Domänenbenutzerkonto kann durch ein Arbeitsgruppenkonto, ein lokales Computerkonto usw. ersetzt werden.

Wichtig: Sie müssen das Risiko verstehen, dass Benutzer in Ihrer Umgebung Befehle auf Betriebssystemebene ausführen dürfen, und Sie sollten diese Berechtigungsstufe xp_cmdshellnur solchen Personen erteilen, die mit dieser Sicherheitsstufe mit der Proxy- Methode vertrauenswürdig genug sind .

  1. Sie haben ein neues Domänenbenutzerkonto mit einem sicheren Kennwort erstellt und den Benutzernamen und das Kennwort zur Kenntnis genommen. Stellen Sie sicher, dass das Konto aktiviert wurde und das Kennwort nie abläuft.

  2. Erstellt ein neues SQL Server-Login, das an das neue Domänenbenutzerkonto gebunden ist, das wir erstellt haben.

  3. Erstellt einen neuen Proxy-Berechtigungsnachweis, der an das Domänenbenutzerkonto gebunden ist.

    EXEC sp_xp_cmdshell_proxy_account '<Domain>\<NewUser>', '<password>' -- you have to type actual password 
  4. Erlaubt, dass der SQL Server-Login den expliziten EXECUTEZugriff auf die vom System angegebene gespeicherte proc von der angegebenen MasterDB aus erweitert sys.xp_cmdshell.

    --see who all has execute access to xp_cmdshell  Use master  EXEC sp_helprotect 'xp_cmdshell'   -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO  -- Enable the xp_cmdshell procedure EXEC sp_configure 'xp_cmdshell', 1 RECONFIGURE GO  -- Grant execute permissions to account GRANT EXECUTE ON xp_cmdshell TO [<Domain>\<NewUser>] 
  5. Erteilen Sie der Person, die die Berechtigung zum EXECUTE AS Identitätswechsel für die neue SQL Server-Anmeldung verwendet .

    GRANT IMPERSONATE ON LOGIN::[<Domain>\<NewUser>] TO [<Domain>\<UserGrantingExecuteAsUser>] 
  6. Führen Sie nun den Befehl mit EXECUTE AS LOGIN aus und übergeben Sie den net stopBefehl an die xp_cmdshellgespeicherte Prozedur. Das Sicherheitsprinzip, wie es in Schritt 5 oben in aufgeführt <Domain>\<UserGrantingExecuteAsUser>ist, sollte das der Person sein, auf der Sie SSMS als sicherheitskontextabhängig für diese Aufgabe ausführen.

    EXECUTE AS LOGIN = '<Domain>\<NewUser>' DECLARE @COMMAND nvarchar(4000) SET @COMMAND = 'net stop <servicename>' EXEC xp_cmdshell @COMMAND REVERT 

Weitere Ressourcen