Partager via


Utilisation des SID de service pour accorder des autorisations aux services dans SQL Server

SQL Server utilise des identificateurs de sécurité par service (SID), également appelés principaux de sécurité de service, pour autoriser l’octroi d’autorisations directement à un service spécifique. Cette méthode est utilisée par SQL Server pour accorder des autorisations aux services du moteur et de l’agent (NT SERVICE\MSSQL$<InstanceName> et NT SERVICE\SQLAGENT$<InstanceName> respectivement). À l’aide de cette méthode, ces services peuvent accéder au moteur de base de données uniquement lorsque les services sont en cours d’exécution. Pour plus d’informations, consultez KB2620201 (lien archive).

Cette même méthode peut être utilisée lors de l’octroi d’autorisations à d’autres services. L’utilisation d’un SID de service élimine la surcharge liée à la gestion et à la maintenance des comptes de service et fournit un contrôle plus précis des autorisations accordées aux ressources système.

Voici quelques exemples de services dans lesquels un SID de service peut être utilisé :

  • System Center Operations Manager Service de Santé (NT SERVICE\HealthService)
  • Service de cluster de basculement Windows Server (WSFC) (NT SERVICE\ClusSvc)

Certains services n’ont pas de SID de service par défaut. Le SID de service doit être créé en utilisant SC.exe. Cette méthode a été adoptée par les administrateurs de Microsoft System Center Operations Manager pour accorder l’autorisation à HealthService au sein de SQL Server.

Une fois le SID de service créé et confirmé, il doit être autorisé dans SQL Server. L’octroi d’autorisations est effectué en créant une connexion Windows à l’aide de SQL Server Management Studio (SSMS) ou d’une requête Transact-SQL. Une fois la connexion créée, des autorisations peuvent lui être accordées, elle peut être ajoutée à des rôles et mappée à des bases de données comme n'importe quelle autre connexion.

Conseil / Astuce

Si l’erreur Login failed for user 'NT AUTHORITY\SYSTEM' est reçue, vérifiez que le SID de service existe pour le service souhaité, la connexion SID de service a été créée dans SQL Server et les autorisations appropriées ont été accordées au SID de service dans SQL Server.

Security

Éliminer les comptes de service

Traditionnellement, les comptes de service ont été utilisés pour permettre aux services de se connecter à SQL Server. Les comptes de service ajoutent une couche supplémentaire de complexité de gestion en raison de la maintenance et de la mise à jour périodique du mot de passe du compte de service. En outre, les informations d’identification du compte de service peuvent être utilisées par une personne qui tente de masquer ses activités lors de l’exécution d’actions dans l’instance.

Autorisations granulaires pour les comptes système

Les comptes système ont déjà reçu des autorisations en créant une connexion pour les comptes LocalSystem (NT AUTHORITY\SYSTEM dans en-us) ou NetworkService (NT AUTHORITY\NETWORK SERVICE dans en-us) et en accordant ces autorisations de connexion. Cette méthode accorde des autorisations de processus ou de service dans SQL, qui s’exécute en tant que compte système.

L’utilisation d’un SID de service permet d’accorder des autorisations à un service spécifique. Le service n’a accès qu’aux ressources auxquelles il a accordé des autorisations quand il est en cours d’exécution. Par exemple, si le HealthService fonctionne en tant que LocalSystem et reçoit les droits View Server State, le compte LocalSystem n’aura la permission de View Server State que lorsqu’il s’exécute dans le contexte du HealthService. Si un autre processus tente d’accéder à l’état du serveur sql en tant que LocalSystem, il est refusé.

Examples

R. Créer un SID de service

La commande PowerShell suivante crée un SID de service dans le service de santé de System Center Operations Manager.

sc.exe --% sidtype "HealthService" unrestricted

Important

--% indique à PowerShell d’arrêter l’analyse du reste de la commande. Cela est utile lors de l’utilisation de commandes et d’applications héritées.

B. Interroger un SID de service

Pour vérifier un SID de service ou pour vous assurer qu’un SID de service existe, exécutez la commande suivante dans PowerShell.

sc.exe --% qsidtype "HealthService"

Important

--% indique à PowerShell d’arrêter l’analyse du reste de la commande. Cela est utile lors de l’utilisation de commandes et d’applications héritées.

Chapitre C. Ajouter un SID de service nouvellement créé en tant que connexion

L’exemple suivant crée un identifiant pour le service de surveillance System Center Operations Manager à l’aide de T-SQL.

CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO

D. Ajouter un SID de service existant en tant que connexion

L’exemple suivant crée une connexion pour le service de cluster à l’aide de T-SQL. L’octroi d’autorisations au service de cluster élimine directement la nécessité d’accorder des autorisations excessives au compte SYSTEM.

CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO

E. Accorder des autorisations à un SID de service

Accordez les autorisations requises pour gérer les groupes de disponibilité au service de cluster.

GRANT ALTER ANY AVAILABILITY GROUP TO [NT SERVICE\ClusSvc]
GO

GRANT CONNECT SQL TO [NT SERVICE\ClusSvc]
GO

GRANT VIEW SERVER STATE TO [NT SERVICE\ClusSvc]
GO

Note

La suppression des connexions SID de service ou leur suppression du rôle serveur sysadmin peut entraîner des problèmes pour différents composants de SQL Server qui se connectent au moteur de base de données SQL Server. Voici quelques problèmes :

  • SQL Server Agent ne peut pas démarrer ou se connecter à un service SQL Server
  • Les programmes d’installation de SQL Server rencontrent le problème mentionné dans l’article suivant de la Base de connaissances Microsoft : https://mskb.pkisolutions.com/kb/955813

Pour une instance par défaut de SQL Server, vous pouvez corriger cette situation en ajoutant le SID de service à l’aide des commandes Transact-SQL suivantes :

CREATE LOGIN [NT SERVICE\MSSQLSERVER] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQLSERVER]

CREATE LOGIN [NT SERVICE\SQLSERVERAGENT] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLSERVERAGENT]

Pour une instance nommée de SQL Server, utilisez les commandes Transact-SQL suivantes :

CREATE LOGIN [NT SERVICE\MSSQL$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQL$SQL2019]

CREATE LOGIN [NT SERVICE\SQLAgent$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLAgent$SQL2019]

Dans cet exemple, SQL2019 correspond au nom de l’instance de SQL Server.

Étapes suivantes

Pour plus d'informations sur la structure de SID de service, lisez la structure SERVICE_SID_INFO.

Découvrez les options supplémentaires disponibles lors de la création d’une connexion.

Pour utiliser la sécurité basée sur les rôles avec des SID de service, découvrez comment créer des rôles dans SQL Server.

Découvrez différentes façons d’accorder des autorisations aux SID de service dans SQL Server.

Pour plus d’informations sur la configuration des comptes de service pour SQL Server, consultez Configurer des comptes de service Windows et des autorisations.