Compartir a través de


Desencadenadores logon

Los desencadenadores logon activan procedimientos almacenados en respuesta a un evento LOGON. Este evento se genera cuando se establece una sesión de usuario con una instancia de SQL Server. Los desencadenadores logon se activan después de que termine la fase de autenticación del inicio de sesión, pero antes de que se establezca la sesión de usuario realmente. Por tanto, todos los mensajes que se originan dentro del desencadenador que alcanzaría normalmente el usuario, como los mensajes de error y los mensajes de la instrucción PRINT, se desvían al registro de errores de SQL Server. Los desencadenadores logon no se activan si se produce un error en la autenticación.

Puede utilizar desencadenadores logon para realizar auditorías y controlar sesiones de servidor, como el seguimiento de la actividad de inicio de sesión, la restricción de inicios de sesión en SQL Server o la limitación del número de sesiones para un inicio de sesión específico. Por ejemplo, en el siguiente código, el desencadenador logon rechaza los intentos de iniciar sesión en SQL Server iniciados por el inicio de sesión login_test si ya hay tres sesiones de usuario creadas por dicho inicio de sesión.

USE master;
GO

CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE,
    CHECK_EXPIRATION = ON;
GO

GRANT VIEW SERVER STATE TO login_test;
GO

CREATE TRIGGER connection_limit_trigger
ON ALL SERVER WITH EXECUTE AS 'login_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'login_test' AND
    (SELECT COUNT(*) FROM sys.dm_exec_sessions
            WHERE is_user_process = 1 AND
                original_login_name = 'login_test') > 3
    ROLLBACK;
END;

Tenga en cuenta que el evento LOGON se corresponde con el evento de traza SQL AUDIT_LOGIN, que se puede utilizar en notificaciones de eventos. La diferencia principal entre los desencadenadores y las notificaciones de eventos radica en que los desencadenadores se generan de forma sincrónica con los eventos, mientras que las notificaciones de eventos son asincrónicas. Esto significa, por ejemplo, que si desea que no se establezca una sesión, debe utilizar un desencadenador logon. Para este fin, no se puede utilizar una notificación de eventos en un evento AUDIT_LOGIN.

Capturar datos de eventos de desencadenador logon

Para capturar datos XML acerca de los eventos LOGON para utilizarlos dentro de los desencadenadores logon, utilice la función EVENTDATA. Para obtener más información, vea Diseñar e implementar almacenamiento estructurado (motor de base de datos). El evento LOGON devuelve el siguiente esquema de datos de eventos:

<EVENT_INSTANCE>

    <EventType>event_type</EventType>

    <PostTime>post_time</PostTime>

    <SPID>spid</SPID>

    <ServerName>server_name</ServerName>

<LoginName>login_name</LoginName>

<LoginType>login_type</LoginType>

<SID>sid</SID>

<ClientHost>client_host</ClientHost>

<IsPooled>is_pooled</IsPooled>

</EVENT_INSTANCE>

  • <EventType>
    Contiene LOGON.

  • <PostTime>
    Contiene la hora en la que se solicita que se establezca una sesión.

  • <SID>
    Contiene la secuencia binaria codificada de base 64 del número de identificación de seguridad (SID) para el nombre de inicio de sesión especificado.

  • <ClientHost>
    Contiene el nombre de host del cliente desde el que se realiza la conexión. El valor es '&lt;local_machine&gt;' si el nombre del cliente y del servidor son iguales. De lo contrario, el valor es la dirección IP del cliente.

  • <IsPooled>
    Es 1 si la conexión se vuelve a utilizar empleando la agrupación de conexiones. De lo contrario, el valor es 0.

Crear, modificar y quitar desencadenadores logon

Los desencadenadores logon se pueden crear desde cualquier base de datos, pero se registran en el nivel de servidor y residen en la base de datos maestra.

Para crear un desencadenador logon

Para modificar un desencadenador logon

Para quitar un desencadenador logon

Obtener información acerca de los desencadenadores logon

Puede ver los metadatos acerca de los desencadenadores logon si consulta la vista de catálogo sys.server_triggers.