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
Podrobnosti
| Vlastnost | Hodnota |
|---|---|
| Název produktu | SQL Server |
| ID události | 17892 |
| Zdroj událostí | MSSQLSERVER |
| Součást | SQLEngine |
| Symbolický název | SRV_LOGON_FAILED_BY_TRIGGER |
| Text zprávy | Přihlášení pro přihlašovací <jméno> se nezdařilo kvůli spuštění triggeru. |
Vysvětlení
Chyba 17892 se vyvolá, když se kód triggeru přihlášení nemůže úspěšně spustit. Triggery přihlášení aktivují uložené procedury v reakci na událost LOGON. Tato událost se vyvolá, když je relace uživatele vytvořena s instancí SQL Serveru. Uživateli se zobrazí chybová zpráva podobná následujícímu:
Msg 17892, úroveň 14, stav 1, název< serveru>, řádek 1
Přihlášení pro přihlašovací <jméno> se nezdařilo kvůli spuštění triggeru.
Možné příčiny
K problému může dojít v případě, že při spuštění kódu triggeru pro konkrétní uživatelský účet dojde k chybě. Mezi tyto scénáře patří:
- Trigger se pokusí vložit data do tabulky, která neexistuje.
- Přihlášení nemá oprávnění k objektu, na který odkazuje trigger přihlášení.
Akce uživatele
V závislosti na scénáři, ve které se nacházíte, můžete použít jedno z níže uvedených řešení.
Scénář 1: V současné době máte přístup k otevřené relaci k SQL Serveru v rámci účtu správce
V takovém případě můžete provést nápravnou akci, která je nutná k opravě kódu triggeru.
Příklad 1: Pokud objekt, na který odkazuje kód triggeru, neexistuje, vytvořte tento objekt, aby trigger přihlášení mohl úspěšně spustit.
Příklad 2: Pokud existuje objekt odkazován kódem triggeru, ale uživatelé nemají oprávnění, udělte jim potřebná oprávnění pro přístup k objektu.
Případně můžete trigger přihlášení jednoduše vypnout nebo zakázat, aby se uživatelé mohli dál přihlašovat k SQL Serveru.
Scénář 2: Nemáte žádnou aktuální relaci, která je otevřená v rámci oprávnění správce, ale na SQL Serveru je povolené vyhrazené připojení správce (DAC).
V tomto případě můžete pomocí připojení DAC provést stejné kroky jako v případě 1, protože připojení DAC nejsou ovlivněna triggery přihlášení. Další informace o připojení DAC najdete v tématu: Diagnostické připojení pro správce databáze.
Pokud chcete zkontrolovat, jestli je na SQL Serveru povolený DAC, můžete zkontrolovat protokol chyb SQL Serveru a podívat se na zprávu, která je podobná následující:
2020-02-09 16:17:44.150 Server Vyhrazené připojení správce byl vytvořen pro naslouchání místně na portu 1434.
Scénář 3: Nemáte na serveru povolený daC ani existující relaci správce s SQL Serverem.
V tomto scénáři by jediným způsobem, jak problém napravit, bylo provést následující kroky:
Zastavte SQL Server a související služby.
Spusťte SQL Server z příkazového řádku pomocí parametrů
-cspuštění ,-ma-f. Tímto způsobem se zakáže trigger přihlášení a umožníte provádět stejná nápravná opatření, která jsou popsána v případě 1 výše.Poznámka:
Výše uvedený postup vyžaduje SA nebo ekvivalentní účet správce.
Další informace o těchto a dalších možnostech spuštění naleznete v tématu: Možnosti spuštění služby databázového stroje.
Více informací
Jiná situace, kdy se při použití EVENTDATA funkce nezdaří přihlášení triggerů. Tato funkce vrátí XML a rozlišují se malá a velká písmena. Proto vytvoříte následující trigger přihlášení, který má v úmyslu blokovat přístup na základě IP adresy, můžete narazit na problém:
CREATE TRIGGER tr_logon_CheckIP
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF IS_SRVROLEMEMBER ( 'sysadmin' ) = 1
BEGIN
DECLARE @IP NVARCHAR ( 15 );
SET @IP = ( SELECT EVENTDATA ().value ( '(/EVENT_INSTANCE/ClientHost)[1]' , 'NVARCHAR(15)' ));
IF NOT EXISTS( SELECT IP FROM DBAWork.dbo.ValidIP WHERE IP = @IP )
ROLLBACK ;
END ;
END ;
GO
Uživatel neudržel případ při kopírování tohoto skriptu z internetu v této části triggeru:
SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');
V důsledku toho EVENTDATA vždy vrátil hodnotu NULL a všechna jejich ekvivalentní přihlášení SA byla odepřena přístup. V tomto případě připojení DAC nebylo povoleno, takže jsme neměli možnost restartovat server s výše uvedenými spouštěcími parametry, aby se trigger odstranil.