Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Limitando sessões de usuário simultâneas para um logon específico no SQL Server


No SQL Server, você pode usar um gatilho de logon para auditar e controlar as sessões do servidor, como rastrear a atividade de logon, restringir logons ao SQL Server ou limitar o número de sessões para um logon específico.

Este artigo fornece um exemplo de uso de um gatilho de logon para limitar o número de sessões simultâneas para um logon específico.

Exemplo


Aqui está um exemplo de um gatilho de logon que limita o número de sessões simultâneas para um logon específico a 1.

Crie um login:
CREATE LOGIN Marge WITH PASSWORD = 'SQLServer123';
GRANT VIEW SERVER STATE TO Marge;

Crie o gatilho de logon:
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;

Agora, quando esse usuário tentar fazer login em uma segunda conexão, ele deverá receber o seguinte erro:
Error message: Logon failed for login 'Marge' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english.

Observe que todas as mensagens originadas dentro do gatilho que normalmente chegariam ao usuário, como mensagens de erro e mensagens do PRINT instrução, são desviados para o log de erros do SQL Server.

Além disso, os gatilhos de logon não são acionados se a autenticação falhar.