sql >> Databasteknik >  >> RDS >> Sqlserver

Begränsning av samtidiga användarsessioner för en specifik inloggning i SQL Server

I SQL Server kan du använda en inloggningsutlösare för att granska och kontrollera serversessioner, till exempel spåra inloggningsaktivitet, begränsa inloggningar till SQL Server eller begränsa antalet sessioner för en specifik inloggning.

Den här artikeln ger ett exempel på hur man använder en inloggningsutlösare för att begränsa antalet samtidiga sessioner för en specifik inloggning.

Exempel

Här är ett exempel på en inloggningsutlösare som begränsar antalet samtidiga sessioner för en specifik inloggning till 1.

Skapa en inloggning:

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

Skapa inloggningsutlösaren:

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;

Nu, när den användaren försöker logga in på en andra anslutning, bör de få följande felmeddelande:

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

Observera att alla meddelanden som kommer från utlösaren och som vanligtvis når användaren, till exempel felmeddelanden och meddelanden från PRINT sats, vidarebefordras till SQL Server-felloggen.

Dessutom aktiveras inte inloggningsutlösare om autentiseringen misslyckas.


  1. Lista alla tabeller i postgresql informationsschema

  2. Lista alla indexnamn, kolumnnamn och dess tabellnamn för en PostgreSQL-databas

  3. Kul med (columnstore) komprimering på ett väldigt stort bord – del 2

  4. Räkna antalet unika värden