Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server 2005 : Mise en place d’une sécurité à base de certificat sous SQL Server 2005

Généralement lors de l'utilisation de serveurs multiples sous SQL Server l'utilisation d'un domaine dans lequel se trouvent tous les serveurs SQL Server est fortement conseillée. Même s'il existe des astuces pour se passer d'un domaine, celui facilite grandement la vie.

Mais dans certains cas l'utilisation d'un domaine est impossible pour des questions de sécurité et l'authentification entre 2 serveurs SQL Server reste tout de même une nécessite. Prenons par exemple le cas d'un serveur SQL Server présent dans une DMZ, c'est prendre un grand risque que de joindre ce dernier au domaine de l'entreprise.

Heureusement SQL Server 2005 est arrivé avec une solution alternative très intéressante, l'authentification par certificat.

Anciennement une connexion distante sur un serveur ne peut se faire que si vous êtes dans un domaine, que les 2 serveurs de base de données sont dans ce même domaine et que vous vous connectez à l'aide de l'authentification Windows. Autre choix possible l'utilisation de serveur liés permettant de mapper manuellement un compte de sécurité local avec un compte de sécurité distant (encore fois t'il que les mots de passe ne changent pas).

Sinon point de salut, impossible de connecter à distance avec un même compte. Dans l'exemple ci-dessous les 2 serveurs sont dans des domaines différents et un Login SQL intitulé « ConnexionX » tente de se connecter sur le second serveur B par exemple pour une mise en place de mirroring. La tentative de connexion échoue.

Dans le cas d'une configuration sécurisée à base de certificat, ce même Login « ConnexionX », dispose d'un certificat (peut importe la manière dont il a été généré) avec la paire clef publique / privée. Ce certificat est recopié partiellement (uniquement la composante publique de celui-ci) sur le second serveur et est associé à un autre login (ici « ConnexionY »). Dès lors que ConnexionX se connecte le serveur B celui-ci disposera des droits accordés au Login ConnexionY

L'intérêt est bien d'avoir 2 serveurs distincts se connectant l'un à l'autre avec seulement quelques comptes servant au dialogue. Cette configuration bien qu'intéressante hors d'un domaine devient cependant complexe lorsque le nombre de serveurs en cause augmente.

L'utilisation ce type d'authentification se fera dans les quelques cas suivant :

  • Serveurs liés avec connexion SQL
  • Replication
  • Mirroring
  • Service broker avec connexion distante
  • Etc.

Pour paramétrer tout cas, quelques scripts…

Côté Serveur A pour une mise en place de d'une communication sécurisé pour un database mirroring :

USE master
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '{425C4D21-AD5D-4807-A612-74C212759F7E}';
GO

CREATE CERTIFICATE A_CERT
   WITH SUBJECT = 'A', START_DATE = '20070101',  EXPIRY_DATE = '20501231';
GO


CREATE ENDPOINT A_MIRROR_END
   STATE = STARTED
   AS TCP (
      LISTENER_PORT = 7024
      , LISTENER_IP = (192.168.25.2)
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE A_CERT
      , ENCRYPTION = DISABLED
      , ROLE = PARTNER
   );
GO

BACKUP CERTIFICATE A_CERT TO FILE = 'C:\A_CERT.cer';
GO

Même chose à exécuter sur le second serveur (mais pour un autre certificat : B_CERT). Ensuite on recopie les fichiers de certificat générés sur les serveurs on les copies sur le ou les autres serveurs (ici A_CERT est copié sur B et B_CERT sur A).

Puis pour autoriser les connexions entrantes sur le serveur, je me positionne sur le serveur B (on présume ici que B_MIRROR_END existe déjà et que le fichier de A_CERT a été copié dans le système de fichier) :

USE master;
CREATE LOGIN B_login WITH PASSWORD = '{9CDA5CAF-9F82-4989-B300-5B90E02D64B1}';
GO

CREATE USER B_user FOR LOGIN B_login;
GO

CREATE CERTIFICATE B_CERT
   AUTHORIZATION B_user
   FROM FILE = 'C:\B_CERT.cer'
GO

GRANT CONNECT ON ENDPOINT::A_MIRROR_END TO B_login;
GO

On reproduit le même type de script sur A ensuite (A et B inversé) et la configuration est prête.

Dans cet exemple, les mots de base sont générés à base de GUID, c'est uniquement pour avoir un mot de passe suffisamment fort que j'ai cela et aléatoire, ce n'est en aucun cas une obligation.

Bonne sécurité…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié vendredi 9 novembre 2007 18:49 par christian
Classé sous : ,

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2010 : La BI dans SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 10 minutes

- TechDays Paris 2010 : Déploiement de nouvelles technologies – Retour d’expérience par l’informatique de Microsoft par Blog Technique de Romelard Fabrice le il y a 1 heure et 37 minutes

- TechDays Paris 2010 : Plan de migration vers SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 5 heures et 19 minutes

- TechDays Paris 2010 : La pleinière du second jour par Blog Technique de Romelard Fabrice le il y a 6 heures et 25 minutes

- Visual Studio 2010 and .NET Framework 4 Release Candidate now available par Matthieu MEZIL le il y a 9 heures et 30 minutes

- Création d’une base de donnée sous SQL Azure par Le Blog (Vert) d'Arnaud JUND le il y a 10 heures et 27 minutes

- TechDays Paris 2010 : Les Services d’applications dans SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 20 heures et 26 minutes

- TechDays Paris 2010 : La GED et SharePoint 2010 par Blog Technique de Romelard Fabrice le 02-08-2010, 16:54

- TechDays Paris 2010 : SharePoint 2010 et Les réseaux sociaux par Blog Technique de Romelard Fabrice le 02-08-2010, 15:40

- TechDays Paris 2010 : SharePoint 2010 – Description et nouveautés par Blog Technique de Romelard Fabrice le 02-08-2010, 14:33