Het inschakelen van niet-beheerdersaccounts voor het uitvoeren van de uitgebreide opgeslagen procedure ' xp_cmdshell ' in SQL Server 2000


Samenvatting


In dit artikel wordt uitgelegd hoe u een SQL Server-account (Windows-Windows) kunt configureren voor gebruik door SQL-aanmeldingen die geen lid zijn van de vaste serverrol sysadmin . Daarnaast bevat het artikel verwijzingen naar meer informatie over het oplossen van problemen die zich kunnen voordoen wanneer u probeert een proxyaccount in te stellen.

Inleiding


Met de xp_cmdshell uitgebreide opgeslagen procedure wordt een Windows-opdrachtshell aangeroepen vanuit Microsoft SQL Server 2000. Wanneer de in xp_cmdshell uitgebreide opgeslagen procedure wordt uitgevoerd door een lid van de rol van sysadmin vaste server, wordt het Windows-proces van de opdrachtshell uitgevoerd met de beveiligingscontext van de Windows-serviceaccount van SQL Server. Wanneer SQL Server bijvoorbeeld wordt uitgevoerd onder een Windows-aanmelding met beheerdersrechten op de computer, ontvangt de gebruiker die een opdrachtprompt opent met de opgeslagen xp_cmdshell uitgebreide opgeslagen procedure, toegang tot Windows als lokale beheerder. Standaard wordt de machtiging voor het uitvoeren van de opgeslagen xp_cmdshell uitgebreide opgeslagen procedure alleen verleend aan leden van de rol sysadmin vaste server. Met deze machtiging kunt u de escalatie van rechten tegenkomen. Als u nieuwe Windows-processen met een beperkt aantal rechten wilt starten, kunt u het account van de SQL server-proxy gebruiken om een Windows-account te configureren met het juiste niveau van rechten.

Meer informatie


Wanneer u de xp_cmdshell uitgebreide opgeslagen procedure probeert uit te voeren van een SQL Server-aanmelding die geen lid is van de serverrol sysadmin en het account van de SQL Server Agent-proxy niet correct is ingesteld, kan het zijn dat er foutberichten worden weergegeven die er ongeveer als volgt uitzien:
Msg 50001, niveau 1, State 50001 xpsql. cpp: fout 997 van GetProxyAccount on line 499
Msg 50001, niveau 1, State 50001 xpsql. cpp: fout 317 van GetProxyAccount on line 499
Msg 50001, niveau 1, State 50001 xpsql. cpp: fout 0 van GetProxyAccount op regel 499
Msg 50001, niveau 1, State 50001 xpsql. cpp: fout 87 van GetProxyAccount on line 499
Als u wilt dat gebruikers van gebruikers van niet-gebruikersnaam de xp_cmdshell uitgebreide opgeslagen procedure uitvoeren in SQL Server 2000, moet u het proxyaccount en het opstartaccount van SQL Server configureren zodat deze lid zijn van de lokale beheerdersgroep. Wanneer SQL servertaken of opdrachten uitvoert voor gebruikers die geen lid zijn van de vaste serverrol sysadmin, wordt met de SQL Server-Agent en de xp_cmdshell uitgebreide opgeslagen procedure de proxy-account gebruikt. De beveiligingsreferenties voor Windows voor het account van de proxy worden opgeslagen in de geheimen-database van de lokale beveiligings instantie (LSA). Alleen Windows-beheerders hebben toegang tot deze informatie. Als het opstartaccount van SQL Server geen lid is van de groep lokale beheerders, kan de gebruiker de beveiligingsreferenties van Windows niet opslaan of ophalen om u aan te melden als het account van de proxy en de bexp_cmdshell uitgebreide opgeslagen procedure mislukt. Als u wilt dat gebruikers van buiten de gebruikersnaam de xp_cmdshell uitgebreide opgeslagen procedure kunnen uitvoeren, moet het opstartaccount van SQL Server lid zijn van de lokale beheerdersgroep. Gebruik een van de volgende methoden om een proxyaccount te configureren voor aanmeldingsgegevens van SQL Server die geen deel uitmaken van de vaste serverrol van sysadmin .

Methode 1: SQL Server Enterprise Manager gebruiken

Het Windows-account configureren

Ga als volgt te werk als u wilt instellen dat gebruikers van niet-sysadmin de xp_cmdshell uitgebreide opgeslagen procedure kunnen uitvoeren:
  1. Start SQL Server Enterprise Manager.
  2. Vouw in SQL Server Enterprise Manager Microsoft SQL Serveruit en vouw vervolgens SQL Server Groupuit.
  3. Vouw het exemplaar van SQL Server uit waarvoor u het proxyaccount wilt instellen.
  4. Vouw beheeruit, klik met de rechtermuisknop op SQL Server Agenten klik vervolgens op Eigenschappen.
  5. Klik in het dialoogvenster Eigenschappen van SQL Server-Agent op het tabblad taak systeem .
  6. Schakel onder niet-systeemsysadmin-taakstap proxyaccounthet selectievakje alleen gebruikers met sysadmin priviledges kunnen de taakstappen CmdExec en ActiveScripting uitvoeren uit.
  7. Typ in het dialoogvenster proxy-account van SQL Server-Agentde naam van het Windows-account in het vak gebruikersnaam.
  8. Typ in het vak wachtwoord het wachtwoord van Windows.
  9. Typ in het vak Domain het domein waarvan het Windows-account lid is, en klik vervolgens tweemaal op OK .

Een SQL Server-aanmeldingsaccount toevoegen

Voer de volgende stappen uit om een SQL Server-aanmeldingsaccount toe te voegen dat u machtigingen wilt verlenen om de xp_cmdshell uitgebreide opgeslagen procedure uit te voeren:
  1. Vouw in SQL Server Enterpise Managerbeveiliginguit.
  2. Klik in het deelvenster logins met de rechtermuisknop op het SQL Server-aanmeldingsaccount waaraan u machtigingen wilt toekennen en klik vervolgens opEigenschappen.Opmerking Als het account nog niet is toegevoegd, kunt u een Windows-proxyaccount maken als de aanmeldingsaccount.
  3. Klik in het dialoogvenster aanmeld eigenschappen van SQL Server op het tabblad database Access .
  4. Selecteer in de lijst opgeven welke database kan worden gebruikt door deze aanmelding het selectievakje toestaan voor de hoofd database en klik vervolgens op OK.
  5. Vouw databasesuit, vouwstramienuit en klik vervolgens op opgeslagen procedures uitbreiden.
  6. Klik met de rechtermuisknop op dexp_cmdshell uitgebreide opgeslagen procedure en klik vervolgens opEigenschappen.
  7. Klik in het dialoogvenster Eigenschappen van uitgebreide opgeslagen procedure op machtigingen.
  8. Schakel het selectievakje exec in voor het SQL Server-aanmeldingsaccount waaraan u uitvoermachtigingen wilt verlenen en klik tweemaal op OK .

Methode 2: een Transact-SQL-script uitvoeren

Voer het volgende Transact-SQL-script uit om in te stellen dat de xp_cmdshell uitgebreide opgeslagen procedure door het Windows-account kan worden uitgevoerd:
-- Set database to master.USE masterGO-- Add a valid Windows account as proxy account.EXECUTE xp_sqlagent_proxy_account N'SET'                        , N'<DomainName>'                        , N'<WindowsAccount>'                        , N'<WindowsPassword>'GO-- Get the proxy account to determine whether it is set up correctly. EXECUTE xp_sqlagent_proxy_account N'GET'GO-- Enable non-system administrators to run the job and to execute xp_cmdshell.EXECUTE msdb..sp_set_sqlagent_properties @sysadmin_only = 0GO
Opmerking In dit script is <domeinnaam> het domein waarvan het Windows-account lid is. <WindowsAccount> de naam van een Windows-account is. <WindowsPassword> het wachtwoord voor het Windows-account is. Voer het volgende Transact-SQL-script uit om het SQL Server-aanmeldingsaccount toe te voegen dat u toestemming wilt verlenen om de xp_cmdshell uitgebreide opgeslagen procedure uit te voeren:
USE masterGO-- Grant database access to the SQL Server login account that you want to provide access.EXEC sp_grantdbaccess '<SQLLogin>'GO-- Grant execute permission on xp_cmdshell to the SQL Server login account.GRANT exec ON xp_cmdshell TO <SQLLogin>GO
Opmerking In dit script is <SQLLogin-> de SQL Server-aanmelding die u toestemming wilt verlenen om de xp_cmdshell uitgebreide opgeslagen procedure uit te voeren.Opmerking De proxy-account is het Windows-account in de beveiligingscontext waarin de SQL Server Agent-taken of opdrachtregelopdrachten worden uitgevoerd. Wanneer u een Windows-account instelt voor het account van de SQL Server-Agent-proxy, moet u het account als batchtaak geven aan het gebruikersrecht.

Verwijzingen


Zie voor meer informatie over de xp_cmdshell uitgebreide opgeslagen procedure het onderwerp ' Transact-SQL Reference ' in SQL Server Books Online. Ga naar de volgende websites van MSDN-MSDN (Microsoft Developer Network) voor meer informatie over het proxyaccount van de SQL Server-Agent.Als u meer informatie wilt over het instellen van de juiste machtigingen voor het proxyaccount, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
283811 Het SQL Server-of SQL Server Agent-serviceaccount wijzigen zonder gebruik te maken van SQL Enterprise Manager in SQL Server 2000 of SQL Server Configuration Manager in SQL Server 2005