Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Limitation des sessions utilisateur simultanées pour une connexion spécifique dans SQL Server

Dans SQL Server, vous pouvez utiliser un déclencheur de connexion pour auditer et contrôler les sessions du serveur, comme suivre l'activité de connexion, restreindre les connexions à SQL Server ou limiter le nombre de sessions pour une connexion spécifique.

Cet article fournit un exemple d'utilisation d'un déclencheur de connexion pour limiter le nombre de sessions simultanées pour une connexion spécifique.

Exemple

Voici un exemple de déclencheur de connexion qui limite à 1 le nombre de sessions simultanées pour une connexion spécifique.

Créez un identifiant :

CREATE LOGIN Marge WITH PASSWORD = 'SQLServer123';
GRANT VIEW SERVER STATE TO Marge;

Créez le déclencheur de connexion :

CREATE TRIGGER trg_limit_concurrent_sessions
ON ALL SERVER WITH EXECUTE AS 'Marge'
FOR LOGON  
AS  
BEGIN  
IF ORIGINAL_LOGIN() = 'Marge' AND  
    (SELECT COUNT(*) FROM sys.dm_exec_sessions  
            WHERE is_user_process = 1 AND  
                original_login_name = 'Marge') > 1
    ROLLBACK;  
END;

Désormais, lorsque cet utilisateur essaie de se connecter sur une deuxième connexion, il doit obtenir l'erreur suivante :

Error message: Logon failed for login 'Marge' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english.

Notez que tous les messages provenant de l'intérieur du déclencheur qui atteindraient généralement l'utilisateur, tels que les messages d'erreur et les messages de PRINT instruction, sont redirigés vers le journal des erreurs SQL Server.

De plus, les déclencheurs de connexion ne se déclenchent pas si l'authentification échoue.