Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Beschränken gleichzeitiger Benutzersitzungen für eine bestimmte Anmeldung in SQL Server

In SQL Server können Sie einen Anmeldeauslöser verwenden, um Serversitzungen zu überwachen und zu steuern, z. B. um Anmeldeaktivitäten zu verfolgen, Anmeldungen bei SQL Server zu beschränken oder die Anzahl der Sitzungen für eine bestimmte Anmeldung zu begrenzen.

Dieser Artikel enthält ein Beispiel für die Verwendung eines Anmeldeauslösers, um die Anzahl gleichzeitiger Sitzungen für eine bestimmte Anmeldung zu begrenzen.

Beispiel

Hier ist ein Beispiel für einen Anmeldetrigger, der die Anzahl gleichzeitiger Sitzungen für eine bestimmte Anmeldung auf 1 begrenzt.

Login erstellen:

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

Erstellen Sie den Anmeldetrigger:

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;

Wenn dieser Benutzer nun versucht, sich bei einer zweiten Verbindung anzumelden, sollte er die folgende Fehlermeldung erhalten:

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

Beachten Sie, dass alle Nachrichten, die innerhalb des Triggers entstehen, normalerweise den Benutzer erreichen würden, wie z. B. Fehlermeldungen und Nachrichten von PRINT -Anweisung, werden in das SQL Server-Fehlerprotokoll umgeleitet.

Außerdem werden Anmeldeauslöser nicht ausgelöst, wenn die Authentifizierung fehlschlägt.