Comment activer les comptes non-sysadmin pour exécuter la procédure stockée étendue « xp_cmdshell » dans SQL Server 2000


Résumé


Cet article décrit la configuration d’un compte de proxy d’agent SQL Server de niveau Windows pour qu’il soit utilisé par les connexions SQL qui ne sont pas membres du rôle serveur fixe sysadmin . Par ailleurs, l’article contient des références à des informations supplémentaires pour vous aider à résoudre des problèmes qui risquent de se produire lorsque vous essayez de configurer un compte proxy.

INTRODUCTION


Le xp_cmdshell procédure stockée étendue appelle un interpréteur de commandes Windows à partir de Microsoft SQL Server 2000. Lorsque la procédure stockée étendue xp_cmdshell est exécutée par un membre du rôle de serveur fixe sysadmin , le processus Windows de l’interpréteur de commandes s’exécute avec le contexte de sécurité du compte de service Windows de SQL Server. Par exemple, si SQL Server est en cours d’exécution dans une connexion Windows disposant de droits d’administrateur sur l’ordinateur, l’utilisateur qui ouvre une invite de commandes à l’aide de la procédure stockée étendue xp_cmdshell bénéficiera d’une accès à Windows en tant qu’administrateur local. Par défaut, l’autorisation d’exécution de la procédure stockée étendue xp_cmdshell est accordée uniquement aux membres du rôle serveur fixe sysadmin . Cette autorisation permet de contrecarrer la progression des droits. Lorsque vous voulez démarrer de nouveaux processus Windows avec un niveau de droit réduit, vous pouvez utiliser le compte proxy de l’agent SQL Server pour configurer un compte Windows avec le niveau de droits approprié.

Informations supplémentaires


Lorsque vous essayez d’exécuter la procédure stockée étendue xp_cmdshell à partir d’une connexion SQL Server qui n’est pas membre du rôle serveur sysadmin et que le compte proxy de l’agent SQL Server n’a pas été correctement configuré, vous pouvez recevoir des messages d’erreur similaires à ce qui suit :
MSG 50001, niveau 1, état 50001 xpsql. cpp : erreur 997 d’GetProxyAccount sur la ligne 499
MSG 50001, niveau 1, état 50001 xpsql. cpp : erreur 317 d’GetProxyAccount sur la ligne 499
MSG 50001, niveau 1, état 50001 xpsql. cpp : erreur 0 d’GetProxyAccount sur la ligne 499
MSG 50001, niveau 1, état 50001 xpsql. cpp : erreur 87 d’GetProxyAccount sur la ligne 499
Si vous devez permettre aux utilisateurs non-sysadmin d’exécuter la procédure stockée étendue xp_cmdshell dans SQL Server 2000, vous devez configurer le compte proxy et le compte de démarrage SQL Server en tant que membre du groupe Administrateurs local. Lorsque SQL Server exécute des tâches ou des commandes pour les utilisateurs qui ne sont pas membres du rôle de serveur fixe sysadmin, l’agent SQL Server et le xp_cmdshell procédure stockée étendue utilisent le compte proxy. Les informations d’identification de sécurité Windows pour le compte proxy sont stockées dans la base de données de secrets LSA (local Security Authority). Seuls les administrateurs Windows sont en mesure d’accéder à ces informations. Par conséquent, si le compte de démarrage SQL Server n’est pas membre du groupe Administrateurs local, l’utilisateur ne peut pas stocker ou récupérer les informations d’identification de sécurité Windows pour ouvrir une session en tant que compte proxy et la procédure stockée étendue xp_cmdshell échoue. Pour permettre aux utilisateurs non-sysadmin d’exécuter l' xp_cmdshell procédure stockée étendue, le compte de démarrage SQL Server doit être membre du groupe Administrateurs local. Pour configurer un compte proxy pour les connexions SQL Server qui ne sont pas membres du rôle serveur fixe sysadmin , utilisez l’une des méthodes suivantes.

Méthode 1 : utiliser SQL Server Enterprise Manager

Configurer le compte Windows

Pour définir le compte Windows de manière à permettre aux utilisateurs non-sysadmin d’exécuter l' xp_cmdshell procédure stockée étendue, procédez comme suit :
  1. Démarrez SQL Server Enterprise Manager.
  2. Dans SQL Server Enterprise Manager, développez Microsoft SQL Server, puis développez groupe SQL Server.
  3. Développez l’instance de SQL Server pour laquelle vous souhaitez configurer le compte proxy.
  4. Développez gestion, cliquez avec le bouton droit sur agent SQL Server, puis cliquez sur Propriétés.
  5. Dans la boîte de dialogue Propriétés de l' agent SQL Server , cliquez sur l’onglet système de tâches .
  6. Sous compte de proxy d’étape de travail non sysadmin, désactivez la case à cocher seuls les utilisateurs disposant d’un privilège sysadmin peuvent exécuter les étapes de travail CmdExec et ActiveScripting .
  7. Dans la boîte de dialogue compte proxy de l’agent SQL Server, entrez le nom du compte Windows dans la zone nom d’utilisateur.
  8. Dans la zone mot de passe , tapez le mot de passe Windows.
  9. Dans la zone Domain (domaine ), tapez le domaine dont le compte Windows est membre, puis cliquez sur OK à deux reprises.

Ajouter un compte de connexion SQL Server

Pour ajouter un compte de connexion SQL Server auquel vous voulez accorder des autorisations d’exécution de la procédure stockée étendue xp_cmdshell , procédez comme suit :
  1. Dans SQL Server entreprise Manager, développezsécurité.
  2. Dans le volet connexions , cliquez avec le bouton droit sur le compte de connexion SQL Server auquel vous voulez accorder des autorisations, puis cliquez surPropriétés.Remarque Si le compte n’est pas déjà ajouté, vous pouvez créer un compte de proxy Windows en tant que compte de connexion.
  3. Dans la boîte de dialogue Propriétés de connexion SQL Server , cliquez sur l’onglet accès aux bases de données .
  4. Dans la liste spécifier le type de base de données que vous souhaitez utiliser pour cette connexion , activez la case à cocher autoriser de la base de données maître , puis cliquez sur OK.
  5. Développez bases de données, développezMaster, puis cliquez sur Extend procédures stockées.
  6. Recherchez, puis cliquez avec le bouton droit sur lexp_cmdshell procédure stockée étendue, puis cliquez surPropriétés.
  7. Dans la boîte de dialogue Propriétés de la procédure stockée étendue , cliquez sur autorisations.
  8. Activez la case à cocher Exec correspondant au compte de connexion SQL Server auquel vous voulez accorder des autorisations d’exécution, puis cliquez sur OK à deux reprises.

Méthode 2 : exécuter un script Transact-SQL

Exécutez le script Transact-SQL suivant pour permettre au compte Windows d’exécuter l' xp_cmdshell procédure stockée étendue :
-- 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
Remarque Dans ce script, <nom_domaine> correspond au domaine dont le compte Windows est membre. <WindowsAccount> est le nom du compte Windows. <WindowsPassword> correspond au mot de passe du compte Windows. Pour ajouter le compte de connexion SQL Server auquel vous voulez accorder l’autorisation d’exécution de la procédure stockée étendue xp_cmdshell , exécutez le script Transact-SQL suivant :
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
Remarque Dans ce script, <>SQLLogin est la connexion SQL Server que vous voulez accorder à l’autorisation d’exécuter le xp_cmdshell procédure stockée étendue.Remarque Le compte proxy est le compte Windows dans lequel les tâches de l’agent SQL Server ou de ligne de commande sont exécutées dans le contexte de sécurité. Lorsque vous configurez le compte Windows pour le compte proxy de l’agent SQL Server, vous devez attribuer au compte le niveau « ouvrir une session en tant que tâche de lot ».

Références


Pour plus d’informations sur la procédure stockée étendue xp_cmdshell , voir la rubrique « référence Transact-SQL » dans la documentation en ligne de SQL Server. Pour plus d’informations sur le compte proxy de l’agent SQL Server, visitez le site Web Microsoft Developer Network (MSDN) suivant :Pour plus d’informations sur la définition des autorisations appropriées sur le compte proxy, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
283811 Comment modifier le compte de service SQL Server ou SQL Server agent sans utiliser SQL Enterprise Manager dans SQL Server 2000 ou le gestionnaire de configuration SQL Server dans SQL Server 2005