Delen via


Aanmeldingstriggers

Van toepassing op:SQL ServerAzure SQL Managed Instance

Aanmelding activeert opgeslagen procedures als reactie op een LOGON gebeurtenis. Deze gebeurtenis wordt gegenereerd wanneer een gebruikerssessie tot stand wordt gebracht met een exemplaar van SQL Server. Aanmelding wordt geactiveerd nadat de verificatiefase van het aanmelden is voltooid, maar voordat de gebruikerssessie tot stand is gebracht. Daarom worden alle berichten die afkomstig zijn van de trigger die doorgaans de gebruiker bereiken, zoals foutberichten en berichten uit de PRINT instructie, omgeleid naar het SQL Server-foutenlogboek. Aanmeldingstriggers worden niet geactiveerd als verificatie mislukt.

U kunt aanmeldingstriggers gebruiken om serversessies te controleren en te beheren, zoals door aanmeldingsactiviteiten bij te houden, aanmeldingen te beperken tot SQL Server of het aantal sessies voor een specifieke aanmelding te beperken. In de volgende code weigert de aanmeldingstrigger bijvoorbeeld aanmeldingspogingen naar SQL Server, geïnitieerd door aanmelding login_test als er al drie gebruikerssessies zijn gemaakt door die aanmelding.

USE master;
GO

CREATE LOGIN login_test
WITH PASSWORD = N'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 N'login_test'
FOR LOGON AS BEGIN
    IF ORIGINAL_LOGIN() = N'login_test'
    AND (
        SELECT COUNT(*)
        FROM sys.dm_exec_sessions
        WHERE is_user_process = 1
            AND original_login_name = N'login_test') > 3
    ROLLBACK;
END;

De LOGON gebeurtenis komt overeen met de AUDIT_LOGIN SQL Trace-gebeurtenis, die kan worden gebruikt in gebeurtenismeldingen. Het belangrijkste verschil tussen triggers en gebeurtenismeldingen is dat triggers synchroon worden gegenereerd met gebeurtenissen, terwijl gebeurtenismeldingen asynchroon zijn. Dit betekent bijvoorbeeld dat als u wilt voorkomen dat een sessie tot stand wordt gebracht, u een aanmeldingstrigger moet gebruiken. Een gebeurtenismelding voor een AUDIT_LOGIN gebeurtenis kan hiervoor niet worden gebruikt.

Eerste en laatste trigger opgeven

Er kunnen meerdere triggers worden gedefinieerd voor de LOGON gebeurtenis. Een van deze triggers kan worden aangewezen als de eerste of laatste trigger die moet worden geactiveerd voor een gebeurtenis met behulp van de sp_settriggerorder systeem opgeslagen procedure. SQL Server garandeert niet de uitvoeringsvolgorde van de resterende triggers.

Transacties beheren

Voordat SQL Server een aanmeldingstrigger activeert, maakt SQL Server een impliciete transactie die onafhankelijk is van elke gebruikerstransactie. Wanneer de eerste aanmeldingstrigger wordt geactiveerd, is het aantal transacties daarom 1. Nadat alle inlogtriggers zijn voltooid, wordt de transactie vastgelegd. Net als bij andere typen triggers retourneert SQL Server een fout als een aanmeldingstrigger de uitvoering voltooit met een aantal transacties van 0. De ROLLBACK TRANSACTION instructie stelt het aantal transacties opnieuw in op 0, zelfs als de instructie wordt uitgegeven binnen een geneste transactie. COMMIT TRANSACTION kan het aantal transacties verlagen tot 0. Daarom adviseren we tegen het uitvoeren van COMMIT TRANSACTION-instructies binnen aanmeldingstriggers.

Houd rekening met het volgende wanneer u een ROLLBACK TRANSACTION instructie in aanmeldingstriggers gebruikt:

  • Alle gegevenswijzigingen die tot en met het punt ROLLBACK TRANSACTION zijn aangebracht, worden teruggedraaid. Deze wijzigingen omvatten wijzigingen die zijn aangebracht door de huidige trigger en door eerdere triggers die op dezelfde gebeurtenis worden uitgevoerd. Eventuele resterende triggers voor de specifieke gebeurtenis worden niet uitgevoerd.

  • De huidige trigger blijft alle resterende instructies uitvoeren die na de ROLLBACK instructie worden weergegeven. Als een van deze instructies gegevens wijzigt, worden de wijzigingen niet teruggedraaid.

Er wordt geen gebruikerssessie tot stand gebracht als een van de volgende voorwaarden optreedt tijdens het uitvoeren van een trigger op een LOGON gebeurtenis:

  • De oorspronkelijke impliciete transactie wordt teruggedraaid of mislukt.
  • Er treedt een fout op met een zwaarte groter dan 20 binnen de triggerbody.

Een aanmeldingstrigger uitschakelen

Een aanmeldingstrigger kan effectieve verbindingen met de database-engine voor alle gebruikers voorkomen, inclusief leden van de vaste serverfunctie sysadmin . Wanneer een aanmeldingstrigger verbindingen verhindert, kunnen leden van de vaste serverfunctie sysadmin verbinding maken met behulp van de toegewezen beheerdersverbinding of door de database-engine te starten in minimale configuratiemodus (-f). Zie Database Engine Service-opstartoptiesvoor meer informatie.