Déclencheurs de connexion

Les déclencheurs de connexion lancent des procédures stockées en réponse à un événement LOGON. Cet événement est déclenché lorsqu'une session utilisateur est établie avec une instance de SQL Server. Les déclencheurs de connexion sont activés au terme de la phase d'authentification de connexion mais avant l'établissement de la session utilisateur. Par conséquent, tous les messages provenant du corps du déclencheur et habituellement destinés à l'utilisateur, (les messages et les messages d'erreur de l'instruction PRINT, par exemple), sont dirigés vers le journal d'erreurs SQL Server. Les déclencheurs de connexion ne sont pas activés si l'authentification échoue.

Vous pouvez faire appel aux déclencheurs de connexion pour auditer et contrôler les sessions de serveur en effectuant, par exemple, le suivi de l'activité de connexion, en restreignant les connexions à SQL Server ou en limitant le nombre des sessions pour une connexion spécifique. Par exemple, dans le code suivant, le déclencheur de connexion refuse une tentative de connexion à SQL Server initiée par la connexion login_test si trois sessions utilisateur ont déjà été créées par cette connexion.

USE master;
GO
CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE,
    CHECK_EXPIRATION = ON;
GO
GRANT VIEW SERVER STATE TO login_test;
GO
CREATE TRIGGER connection_limit_trigger
ON ALL SERVER WITH EXECUTE AS 'login_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'login_test' AND
    (SELECT COUNT(*) FROM sys.dm_exec_sessions
            WHERE is_user_process = 1 AND
                original_login_name = 'login_test') > 3
    ROLLBACK;
END;

Notez que l'événement LOGON correspond à l'événement de trace SQL AUDIT_LOGIN qui peut être utilisé dans les notifications d'événement. La différence principale entre les déclencheurs et les notifications d'événement est que le lancement des déclencheurs est synchronisé avec celui des événements alors que les notifications d'événement sont asynchrones. Cela signifie, entre autre, que si vous souhaitez arrêter l'établissement d'une session, vous devez faire appel à un déclencheur de connexion. Une notification d'événement sur un événement AUDIT_LOGIN ne peut pas être utilisée à cette fin.

Désactivation d'un déclencheur de connexion

Un déclencheur de connexion peut empêcher des connexions actives au Moteur de base de données pour tous les utilisateurs, notamment les membres du rôle serveur fixe sysadmin. Lorsqu'un déclencheur de connexion empêche des connexions, les membres du rôle serveur fixe sysadmin peuvent se connecter à l'aide de la connexion administrateur dédiée, ou en démarrant le Moteur de base de données en mode configuration minimale (- f). Pour plus d'informations, consultez Procédure : utiliser la connexion administrateur dédiée avec SQL Server Management Studio et Utilisation des options de démarrage du service SQL Server.

Capture des données d'événements des déclencheurs de connexion

Pour capturer des données XML relatives à des événements LOGON à utiliser dans des déclencheurs de connexion, utilisez la fonction EVENTDATA. Pour plus d'informations, consultez Conception et implémentation du stockage structuré (moteur de base de données). L'événement LOGON retourne le schéma des données d'événement suivant :

<EVENT_INSTANCE>

    <EventType>event_type</EventType>

    <PostTime>post_time</PostTime>

    <SPID>spid</SPID>

    <ServerName>server_name</ServerName>

<LoginName>login_name</LoginName>

<LoginType>login_type</LoginType>

<SID>sid</SID>

<ClientHost>client_host</ClientHost>

<IsPooled>is_pooled</IsPooled>

</EVENT_INSTANCE>

  • <EventType>
    Contient LOGON.

  • <PostTime>
    Contient l'heure de demande d'établissement d'une session.

  • <SID>
    Contient le flux binaire encodé en base 64 du numéro d'identification de sécurité (SID) correspondant au nom de connexion spécifié.

  • <ClientHost>
    Contient le nom d'hôte du client à partir duquel a été établie la connexion. La valeur est '&lt;local_machine&gt;' si le nom du serveur et du client sont identiques. Sinon, la valeur est l'adresse IP du client.

  • <IsPooled>
    Valeur égale à 1 si la connexion est réutilisée à l'aide du groupement de connexions. Sinon, la valeur est 0.

Création, modification et suppression des déclencheurs de connexion

Ces déclencheurs peuvent être créés à partir de n'importe quelle base de données mais sont enregistrés au niveau du serveur et résident dans la base de données master.

Pour créer un déclencheur de connexion

Pour modifier un déclencheur de connexion

Pour supprimer un déclencheur de connexion

Obtention des informations sur les déclencheurs de connexion

Vous pouvez afficher des métadonnées sur les déclencheurs de connexion en interrogeant l'affichage catalogue sys.server_triggers.