Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Managed Instance
Přihlášení aktivuje uložené procedury v reakci na LOGON událost. Tato událost se vyvolá, když je relace uživatele vytvořena s instancí SQL Serveru. Přihlášení se aktivuje po dokončení ověřovací fáze přihlášení, ale před navázáním uživatelské relace. Proto se všechny zprávy pocházející z triggeru, které by obvykle oslovily uživatele, jako jsou chybové zprávy a zprávy z PRINT příkazu, se přesouvají do protokolu chyb SQL Serveru. Triggery přihlášení se neaktivují, pokud se ověření nezdaří.
Triggery přihlášení můžete použít k auditování a řízení relací serveru, jako je sledování aktivit přihlášení, omezení přihlášení k SQL Serveru nebo omezení počtu relací pro konkrétní přihlášení. Například v následujícím kódu trigger přihlášení odmítne pokusy o přihlášení k SQL Serveru iniciované přihlášením login_test , pokud už existují tři uživatelské relace vytvořené tímto přihlášením.
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;
Událost LOGON odpovídá AUDIT_LOGIN události trasování SQL, kterou lze použít v oznámeních událostí. Hlavním rozdílem mezi triggery a oznámeními událostí je to, že triggery jsou synchronně vyvolány s událostmi, zatímco oznámení událostí jsou asynchronní. To například znamená, že pokud chcete zastavit uskutečnění relace, musíte použít triggery přihlášení. Oznámení o události AUDIT_LOGIN nelze použít pro tento účel.
Zadání prvního a posledního triggeru
Lze definovat více spouštěčů na události LOGON. Každý z těchto triggerů může být určen jako první nebo poslední trigger, který se má spustit na události pomocí systémové uložené procedury sp_settriggerorder. SQL Server nezaručuje pořadí provádění zbývajících triggerů.
Správa transakcí
Než SQL Server aktivuje aktivační událost přihlášení, SQL Server vytvoří implicitní transakci, která je nezávislá na jakékoli uživatelské transakci. Proto při prvním spuštění triggeru přihlášení je počet transakcí 1. Po dokončení provádění všech triggerů přihlášení se transakce potvrdí. Stejně jako u jiných typů triggerů vrátí SQL Server chybu, pokud trigger přihlášení dokončí provádění s počtem transakcí 0. Příkaz ROLLBACK TRANSACTION resetuje počet transakcí na 0, i když je příkaz vystaven uvnitř vnořené transakce.
COMMIT TRANSACTION může dekrementovat počet transakcí na 0. Proto doporučujeme, aby se uvnitř přihlašovacích triggerů nevydávaly COMMIT TRANSACTION příkazy.
Při použití ROLLBACK TRANSACTION příkazu uvnitř triggerů přihlášení zvažte následující skutečnosti:
Všechny změny dat provedené až do bodu
ROLLBACK TRANSACTIONjsou vráceny zpět. Tyto změny zahrnují změny provedené aktuálním triggerem a předchozími triggery, které se spustily při stejné události. Všechny zbývající triggery pro konkrétní událost se nespustí.Aktuální aktivační událost bude nadále spouštět všechny zbývající příkazy, které se zobrazí za příkazem
ROLLBACK. Pokud některý z těchto příkazů upraví data, změny se nevrátí zpět.
Relace uživatele není aktivována, pokud během spuštění spouštěče na událostech LOGON nastane některá z následujících situací:
- Původní implicitní transakce se vrátí zpět nebo selže.
- Chyba, která má závažnost větší než 20, se vyvolá uvnitř těla trigeru.
Zakázání triggeru přihlášení
Přihlašovací trigger může účinně zabránit úspěšnému připojení k modulu Database Engine pro všechny uživatele, včetně členů pevné role serveru sysadmin. Pokud trigger přihlášení brání připojení, členové pevné role serveru sysadmin se mohou připojit pomocí vyhrazeného připojení správce nebo spuštěním databázového stroje v minimálním režimu konfigurace (-f). Pro více informací se podívejte na možnosti spuštění služby databázového stroje .