Sdílet prostřednictvím


MSSQLSERVER_17892

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:

    1. Zastavte SQL Server a související služby.

    2. 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.