Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Limitazione delle sessioni utente simultanee per un accesso specifico in SQL Server

In SQL Server puoi utilizzare un trigger di accesso per controllare e controllare le sessioni del server, ad esempio tenere traccia dell'attività di accesso, limitare gli accessi a SQL Server o limitare il numero di sessioni per un accesso specifico.

Questo articolo fornisce un esempio di utilizzo di un trigger di accesso per limitare il numero di sessioni simultanee per un accesso specifico.

Esempio

Ecco un esempio di trigger di accesso che limita a 1 il numero di sessioni simultanee per un accesso specifico.

Crea un accesso:

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

Crea il trigger di accesso:

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;

Ora, quando quell'utente tenta di accedere su una seconda connessione, dovrebbe ricevere il seguente errore:

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

Tieni presente che tutti i messaggi originati all'interno del trigger che in genere raggiungerebbero l'utente, come messaggi di errore e messaggi da PRINT istruzione, vengono deviati nel registro degli errori di SQL Server.

Inoltre, i trigger di accesso non si attivano se l'autenticazione non riesce.