Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Le Service Broker et ses points d’entrée (End points) – Partie I

Voici une petite série sur le Service Broker, tant cela se justifie en vertu de la facilité d'utilisation de cette composante dans SQL Server. Certes SQL Server 2008 y a ajouté une petite composante « graphique » dans Management Studio et un outil de diagnostic, mais je défie quiconque de le configurer correctement du premier coup.

Le Service Broker est arrivé avec SQL Server 2005 et offre la capacité à SQL Server de réaliser des traitements asynchrone. Grosso Modo on empile les tâches dans une file d'attente (Queue), pour que celles-ci soient traité par une autre tâche. Celle-ci est généralement une procédure stockée écrite à cette fin qui va dépiler automatiquement (l'appel est automatique, le boulot c'est à vous de l'écrire) les enregistrements déposés dans cette file d'attente.

En interne SQL Server utilise le Service Broker, pour entre autres : le Database Mail, les Events Notifications, les Query Notification, etc. En termes de client utilisant cette technologie, citons en un gros : MySpace.

Les End Points sont les point d'entrée extérieur du serveur de base de données. La création d'un Endpoint revient à ouvrir un port TCP accessibles par une application ou un autre serveur de base de données.

La requête suivante me donne la liste disponible sur ma machine :

select * from sys.endpoints

La liste qui suit :

 

Certaines précaution sont à prendre pour l'ouverture d'un port :

  • Vérifiez que ce port n'est pas utilisé (netstat -a).
  • Autorisez le Firewall (local ou du réseau) à laisser l'accès à ce port si nécessaire.

Pourquoi créer un Endpoint pour le Service Broker ? C'est le seul moyen qui va permettre à ce composant de communiquer avec d'autres serveurs. Par autre serveurs j'entends d'autres instances de SQL Server. Ces instances peuvent être sur la même machine, dans le même domaine ou tout autres machines distante et non joignable sur le même réseau que le vôtre. De ceci dépendra la manière de sécuriser le port ouvert pour le Service Broker. Attention par contre à sa configuration car il ne peut y en avoir qu'un seul de ce type par instance !

Voici la syntaxe de base pour créer ce point d'entrée :

    CREATE ENDPOINT [edp_Service_Broker]
        AUTHORIZATION sa
        STATE = STARTED
        AS TCP (LISTENER_PORT = 1234, LISTENER_IP = ALL)
        FOR SERVICE_BROKER

        (

            ...

        )

Le port TCP est à renseigner à la place de 1234 dans le script. Les options possible à la place des (…) sont :

  • AUTHENTICATION
    • WINDOWS KERBEROS, authentification à base de tickets Kerberos possible depuis les domaines Windows 2000. Nécessite un domaine et d'avoir procédé à la configuration Kerberos pour le service et le port que vous souhaitez ouvrir (ici 1234). Cette méthode offre le meilleur en termes de sécurité mais nécessite une configuration plus importante en pré-requis.
    • WINDOWS NTLM, authentification Windows de "base", fonctionne même hors domaine, avec toutefois quelques limitations de sécurité.
    • WINDOWS NEGOTIATE, laisse les serveurs décider quel est le mode approprié d'authentification pour les connexion aux Endpoints.
    • CERTIFICATE, fournis une authentification base sur TLS, chaque Endpoint disposant d'un certificat pour d'authentifier sur celui du second serveur. (Pour plus d'informations sur la manière de la configurer http://support.microsoft.com/kb/915852 )
  • ENCRYPTION
    • SUPPORTED ALGORITHM AES RC4,
    • DISABLED
    • REQUIRED
  • MESSAGE_FORWARDING
    • DISABLED
    • ENABLED

Par exemple, pour un port TCP écoutant sur le ports 1234 et utilisant une authentification via Windows NTLM ou KERBEROS, le cryptage de la connexion est autorisé et sera au choix AES, RC4 ou rien suivant le point de connexion distant :

    CREATE ENDPOINT [edp_Service_Broker]
        AUTHORIZATION sa
        STATE = STARTED
        AS TCP (LISTENER_PORT = 1234, LISTENER_IP = ALL)
        FOR SERVICE_BROKER

        (

            AUTHENTICATION = WINDOWS NEGOTIATE,
            ENCRYPTION = SUPPORTED ALGORITHM AES RC4,
            MESSAGE_FORWARDING = DISABLED

        )

Après cette étape de création des Enpoints reste à autoriser les connexions entre les serveurs.

GRANT CONNECT ON ENDPOINT::edp_Service_Broker TO [srv_login];

Le nom du Endpoint est facile à renseigner, mais quand est-il de la valeur de srv_login ?

  • public : C'est la méthode du paresseux on autorise toute connexion, quelque soir le compte souhaitant s'authentifier, cette méthode n'a d'intérêt que si vous êtes sur un réseau local et maitriser la sécurité de celui-ci.
  • Compte de Service du serveur SQL distant, si vous avez un compte du domaine comme compte de service sur la machine distante
  • Compte de la machine distante, si le compte de service distant est Network Service
  • Login SQL propriétaire du certificat distant, en cas de configuration de la sécurité via TLS et les certificats.

Avant d'autoriser la connexion à un login x ou y, assurez-vous que celui-ci a bien été créer, aucun privilège n'est nécessaire pour ce Login, ni aucuns droits dans une quelconque base de données. Exception faite de l'authentification par certificat ou il faudra créer un utilisateur dans master et y importer un certificat.

Une fois le point d'entrée créer avec succès ces lignes devrait figurer dans le journal d'erreur de SQL Server :

The Service Broker protocol transport is now listening for connections.

Server is listening on [ 'any' <ipv4> 1234].

Dans la prochaine série, nous créons les bases du dialogue du Service Broker.

Bon dialogue…

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é lundi 3 août 2009 15:00 par christian
Classé sous : ,

Commentaires

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

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01