Riepilogo
Questo articolo descrive come configurare un account proxy di SQL Server Agent a livello di Microsoft Windows che venga usato dagli account di accesso SQL che non sono membri del ruolo predefinito del server sysadmin . L'articolo contiene inoltre riferimenti a ulteriori informazioni utili per risolvere i problemi che possono verificarsi quando si tenta di configurare un account proxy.
INTRODUZIONE
La stored procedure estesa xp_cmdshell richiama una shell dei comandi di Windows all'interno di Microsoft SQL Server 2000. Quando la xp_cmdshell stored procedure estesa viene eseguita da un membro del ruolo predefinito del server sysadmin, il processo Windows della shell dei comandi viene eseguito con il contesto di sicurezza dell'account del servizio Windows di SQL Server. Ad esempio, se SQL Server è in uso in un accesso Windows con diritti amministrativi nel computer, l'utente che apre un prompt dei comandi con la xp_cmdshell stored procedure estesa riceverà l'accesso a Windows come amministratore locale. Per impostazione predefinita, l'autorizzazione per eseguire la xp_cmdshell stored procedure estesa viene concessa solo ai membri del ruolo predefinito del server sysadmin . Questa autorizzazione consente di dissuadere l'escalation dei diritti. Quando si vogliono avviare nuovi processi di Windows con un livello ridotto di diritti, è possibile usare l'account proxy di SQL Server Agent per configurare un account di Windows con il livello di diritti appropriato.
Ulteriori informazioni
Quando si tenta di eseguire la xp_cmdshell stored procedure estesa da un account di accesso di SQL Server che non è un membro del ruolo del server sysadmin e che l'account del proxy di SQL Server Agent non è stato configurato correttamente, è possibile che vengano visualizzati messaggi di errore simili ai seguenti:
Msg 50001, livello 1, stato 50001 xpsql. cpp: errore 997 da GetProxyAccount sulla linea 499
Msg 50001, livello 1, stato 50001 xpsql. cpp: errore 317 da GetProxyAccount sulla linea 499
Msg 50001, livello 1, stato 50001 xpsql. cpp: errore 0 da GetProxyAccount sulla linea 499
Msg 50001, livello 1, stato 50001 xpsql. cpp: errore 87 da GetProxyAccount sulla linea 499
Se è necessario consentire agli utenti non sysadmin di eseguire la xp_cmdshell stored procedure estesa in SQL Server 2000, è necessario configurare l'account proxy e l'account di avvio di SQL Server come membro del gruppo Administrators locale. Quando SQL Server esegue processi o comandi per gli utenti che non sono membri del ruolo predefinito del server sysadmin, SQL Server Agent e la xp_cmdshell stored procedure estesa usano l'account proxy. Le credenziali di sicurezza di Windows per l'account proxy sono archiviate nel database dei segreti dell'autorità di sicurezza locale (LSA). Solo gli amministratori di Windows possono accedere a queste informazioni. Pertanto, se l'account di avvio di SQL Server non è un membro del gruppo Administrators locale, l'utente non può archiviare o recuperare le credenziali di sicurezza di Windows per accedere come account proxy e la xp_cmdshell stored procedure estesa non riesce. Per consentire agli utenti non sysadmin di eseguire la xp_cmdshell stored procedure estesa, l'account di avvio di SQL Server deve essere un membro del gruppo Administrators locale. Per configurare un account proxy per gli account di accesso di SQL Server che non sono membri del ruolo predefinito del server sysadmin , usare uno dei metodi seguenti.
Metodo 1: usare SQL Server Enterprise Manager
Configurare l'account di Windows
Per impostare l'account di Windows per consentire agli utenti non sysadmin di eseguire la xp_cmdshell stored procedure estesa, eseguire le operazioni seguenti:
-
Avviare SQL Server Enterprise Manager.
-
In SQL Server Enterprise Manager espandere Microsoft SQL Servere quindi espandere il gruppo SQL Server.
-
Espandere l'istanza di SQL Server per la quale si vuole configurare l'account proxy.
-
Espandere gestione, fare clic con il pulsante destro del mouse su SQL Server Agente quindi scegliere proprietà.
-
Nella finestra di dialogo Proprietà agente SQL Server fare clic sulla scheda sistema processi .
-
In account proxy Step non sysadmin, fare clic per deselezionare la casella di controllo solo gli utenti con sysadmin privilegi possono eseguire i passaggi del processo CmdExec e ActiveScripting .
-
Nella finestra di dialogo account proxy agente SQL ServerDigitare il nome dell'account di Windows nella casella nome utente.
-
Nella casella password Digitare la password di Windows.
-
Nella casella dominio Digitare il dominio di cui fa parte l'account di Windows e quindi fare clic su OK due volte.
Aggiungere un account di accesso di SQL Server
Per aggiungere un account di accesso di SQL Server che si desidera concedere le autorizzazioni per eseguire la xp_cmdshell stored procedure estesa, eseguire le operazioni seguenti:
-
In SQL Server Enterpise Manager espanderesicurezza.
-
Nel riquadro login fare clic con il pulsante destro del mouse sull'account di accesso di SQL Server a cui si vuole concedere le autorizzazioni e quindi scegliereProprietà.Nota Se l'account non è già stato aggiunto, è possibile creare un account proxy di Windows come account di accesso.
-
Nella finestra di dialogo Proprietà account di accesso di SQL Server fare clic sulla scheda Access database .
-
In specificare il database a cui è possibile accedere tramite l'elenco di accesso, fare clic per selezionare la casella di controllo Consenti per il database Master e quindi fare clic su OK.
-
Espandere database,Mastere quindi fare clic su Estendi stored procedure.
-
Individuare e quindi fare clic con il pulsante destro del mouse sullaxp_cmdshell stored procedure estesa e quindi scegliereProprietà.
-
Nella finestra di dialogo proprietà stored procedure estese fare clic su autorizzazioni.
-
Fare clic per selezionare la casella di controllo Exec per l'account di accesso di SQL Server a cui si vuole concedere le autorizzazioni di esecuzione e quindi fare clic su OK due volte.
Metodo 2: eseguire uno script Transact-SQL
Eseguire lo script Transact-SQL seguente per consentire all'account di Windows di eseguire la xp_cmdshell stored procedure estesa:
-- 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
Nota In questo script <nomedominio> è il dominio di cui fa parte l'account di Windows. <WindowsAccount> è il nome dell'account di Windows. <WindowsPassword> è la password per l'account di Windows. Per aggiungere l'account di accesso di SQL Server a cui si vuole concedere l'autorizzazione per l'esecuzione della xp_cmdshell stored procedure estesa, eseguire lo script Transact-SQL seguente:
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
Nota In questo script <SQLLogin> è l'account di accesso di SQL Server per cui si vuole concedere l'autorizzazione per l'esecuzione della xp_cmdshell stored procedure estesa.Nota L'account proxy è l'account di Windows nel cui contesto di sicurezza vengono eseguiti i processi di SQL Server Agent o i comandi della riga di comando. Quando si configura l'account di Windows per l'account proxy di SQL Server Agent, è necessario assegnare l'account a livello di Windows "accesso come processo batch".
Riferimenti
Per altre informazioni sulla xp_cmdshell stored procedure estesa, vedere l'argomento "riferimento a Transact-SQL" nella documentazione online di SQL Server. Per altre informazioni sull'account proxy di SQL Server Agent, visitare i seguenti siti Web di Microsoft Developer Network (MSDN):
xp_sqlagent_proxy_accounthttp://msdn2.Microsoft.com/en-us/library/aa260700 (SQL. 80). aspxxp_cmdshellhttp://msdn2.Microsoft.com/en-us/library/aa369561.aspxla configurazione degli account di servizi di Windowshttp://msdn2.Microsoft.com/en-us/library/aa176564 (SQL. 80). aspxPer altre informazioni su come impostare le autorizzazioni appropriate per l'account proxy, fare clic sul numero dell'articolo della Microsoft Knowledge Base seguente per visualizzare l'articolo:
283811 Come cambiare l'account del servizio SQL Server o SQL Server Agent senza usare SQL Enterprise Manager in SQL Server 2000 o SQL Server Configuration Manager in SQL Server 2005