Sécurité : compte de service et xp_cmdshell

La sécurité des serveurs SQL s'est bien améliorée (et les paramètres d'installation par défaut aussi), mais on voit encore ci et là des méconnaissances des règles élémentaires de sécurité. En particulier le choix du compte de service pour les services de bases de données.

D'aucuns croient toujours qu'il est nécessaire que le compte de service choisi pour SQL Server soit administrateur du serveur (membre du groupe administrateurs) ! Certains, pour se simplifier la vie le rendent même administrateur du domaine Active Directory...!

Soyons bien conscients que cette configuration pose un problème de sécurité : le service SQL, et donc par extension tout administrateur SQL Server possède des permissions bien trop étendues ! Et ce sera parfois difficile à retirer, car il risquera de manquer des permissions si on change la configuration après coup...

Si le compte de service est administrateur Windows, un administrateur SQL Server peut donc lancer les requêtes suivantes (ou même des plus destructrices) :

Et voilà !

Pourtant, les moyens de sécuriser existent et sont simples à mettre en oeuvre :

  • Utiliser un compte de service doté des droits minimum : SQL Server lui octroie les permissions juste nécessaires à son fonctionnement au moment de l'installation, à travers des groupes locaux. Evitez à tout prix le compte système local, qui a bien trop de permissions.
  • Depuis Windows 2008/SQL 2008, l'accès aux ressources de la machine est donné uniquement au service, grâce au SID de service (NT SERVICE\MSSQLSERVER ou NT SERVICE\MSSQL$Instance)
  • Depuis Windows 2008R2, au lieu d'un compte du domaine, vous pouvez utiliser le compte virtuel NT SERVICE\SERVICENAME qui vous est proposé à l'installation. Ce compte peut aussi accéder aux ressources réseau en octroyant des permission au compte d'ordinateur (computer account). Et dans un domaine, il existe aussi les "comptes de service administrés de groupe" (managed service account) : voir http://technet.microsoft.com/library/ff641731%28v=ws.10%29.aspx

Votre installation de SQL Server est-elle bien sécurisée ?