Triggers Logon en SQL Server

Triggers Logon

Los tipos de Triggers Logon se disparan en respuesta a un evento LOGON o de inicio de sesión en una instancia de SQL Server. El Trigger de tipo Logon se desencadena después de que finaliza la fase de autenticación del inicio de sesión, pero antes de que se establezca realmente la sesión del usuario. Por lo tanto, todos los mensajes que se originan dentro del desencadenador que normalmente llegarían al usuario, como los mensajes de error y los mensajes de la instrucción PRINT si es que el Trigger los tiene, se desvían al registro de errores de SQL Server.

Los disparadores de inicio de sesión no se activan si falla la autenticación. Puede usar los Triggers Logon para auditar y controlar las sesiones del servidor, como el seguimiento de la actividad de inicio de sesión, restringir los inicios de sesión en SQL Server o limitar el número de sesiones para un inicio de sesión específico.

Ejercicio

Crear un Trigger Logon que rechaza los intentos de inicio de sesión en SQL Server si ya existen dos sesiones de usuario creadas por ese inicio de sesión.
Primero crear el inicio de sesión para hacer la prueba (Ver Logins)
Use master
go
Create login TrainerPrueba WITH PASSWORD = ‘123’
go
Grant View Server State TO TrainerPrueba;
go

Crear el Trigger para probar las conexiones.
Create trigger trLimitarConexion2
On ALL Server With Execute As ‘TrainerPrueba’
FOR LOGON
AS
Begin
If ORIGINAL_LOGIN()= ‘TrainerPrueba’ AND
(SELECT COUNT(*) FROM sys.dm_exec_sessions
WHERE is_user_process = 1 AND
original_login_name = ‘TrainerPrueba’) > 2
ROLLBACK
End
go

Para probar que el Trigger Logon creado funciona primero vamos a conectarnos dos veces a la misma instancia de SQL Server. La imagen muestra dos conexiones activas a la instancia de SQL Server.

Ahora vamos a intentar conectarnos nuevamente usando el inicio de sesión TrainerPrueba.

Al pulsar Connect para realizar la conexión aparece el mensaje que se muestre en la figura siguiente, el que indica que no se ha podido realizar la conexión debido a la ejecución del Trigger.