Freigeben über


MSSQLSERVER_17892

Gilt für: SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 17892
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name SRV_LOGON_FAILED_BY_TRIGGER
Meldungstext Fehler bei der Anmeldung für den Anmeldenamen <> aufgrund der Triggerausführung.

Erklärung

Die Fehlermeldung 17892 wird angezeigt, wenn ein Anmeldetriggercode nicht erfolgreich ausgeführt werden kann. Anmeldetrigger lösen gespeicherte Prozeduren als Antwort auf ein LOGON-Ereignis aus. Dieses Ereignis wird ausgelöst, wenn eine Benutzersitzung mit einer SQL-Server-Instanz erstellt wird. Dem Benutzer wird eine Fehlermeldung wie die folgende angezeigt:

Msg 17892, Ebene 14, Status 1, Serverservername<>, Zeile 1
Fehler bei der Anmeldung für den Anmeldenamen <> aufgrund der Triggerausführung.

Mögliche Ursachen

Das Problem kann auftreten, wenn beim Ausführen des Triggercodes für das entsprechende Benutzerkonto ein Fehler aufgetreten ist. Einige mögliche Szenarios:

  • Der Trigger versucht, Daten in eine Tabelle einzufügen, die nicht vorhanden ist.
  • Der Benutzer verfügt über keine Berechtigung für das Objekt, auf das der Anmeldetrigger verweist.

Aktion des Benutzers

Abhängig von dem Szenario, in dem Sie sich befinden, können Sie eine der folgenden Lösungen verwenden.

  • Szenario 1: Sie haben derzeit Zugriff auf eine geöffnete Sitzung mit SQL Server unter einem Administratorkonto.

    In diesem Fall können Sie die erforderlichen Korrekturmaßnahmen zum Korrigieren des Triggercodes ergreifen.

    • Beispiel 1: Wenn ein Objekt, auf das durch den Triggercode verwiesen wird, nicht vorhanden ist, erstellen Sie dieses Objekt, damit der Anmeldetrigger erfolgreich ausgeführt werden kann.

    • Beispiel 2: Wenn ein Objekt, auf das durch den Triggercode verwiesen wird, aber keine Berechtigungen besitzt, erteilen Sie ihnen die erforderlichen Berechtigungen für den Zugriff auf das Objekt.

    Alternativ können Sie einfach den Anmeldetrigger ablegen oder deaktivieren, damit sich Benutzer weiterhin bei SQL Server anmelden können.

  • Szenario 2: Sie haben keine aktuelle Sitzung, die unter Administratorrechten geöffnet ist, aber dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) ist auf dem SQL Server aktiviert.

    In diesem Fall können Sie die dedizierte Administratorverbindung verwenden, um die gleichen Schritte durchzuführen, die im Fall 1 erläutert werden, da sich Anmeldetrigger nicht auf dedizierte Administratorverbindungen auswirken. Weitere Informationen zur DAC-Verbindung finden Sie unter: Diagnoseverbindung für Datenbankadministratoren.

    Um zu überprüfen, ob DAC auf Ihrem SQL Server aktiviert ist, können Sie das SQL Server-Fehlerprotokoll auf eine Meldung überprüfen, die den folgenden ähnelt:

    2020-02-09 16:17:44.150 Die Unterstützung für dedizierte Administratorverbindungen wurde zum lokalen Lauschen an Port 1434 eingerichtet.

  • Szenario 3: Sie verfügen weder über DAC auf Ihrem Server noch über eine vorhandene Administratorsitzung für SQL Server.

    In diesem Szenario sind die folgenden Schritte die einzige Möglichkeit, das Problem zu beheben:

    1. Beenden Sie SQL Server und verwandte Dienste.

    2. Starten Sie SQL Server über die Eingabeaufforderung mit den Startparametern -c, -mund -f. Dadurch wird der Anmeldetrigger deaktiviert, und Sie können dieselben Korrekturmaßnahmen ergreifen, die bereits unter Fall 1 oben erläutert wurden.

      Hinweis

      Das oben beschriebene Verfahren erfordert eine SA oder ein entsprechendes Administratorkonto.

      Weitere Informationen zu diesen und anderen Startoptionen finden Sie unter: Datenbank-Engine Dienststartoptionen.

Weitere Informationen

Eine weitere Situation, in der bei Anmeldetriggern Fehler auftreten, ist bei Verwendung der EVENTDATA-Funktion. Diese Funktion gibt XML zurück, und die Groß-/Kleinschreibung wird berücksichtigt. Wenn Sie also den folgenden Anmeldetrigger erstellen, durch den Sie den Zugriff basierend auf der IP-Adresse blockieren, kann folgendes Problem auftreten:

 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

Der Benutzer hat beim Kopieren dieses Skripts aus dem Internet für diesen Teil des Triggers die Groß-/Kleinschreibung nicht berücksichtigt:

 SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');

Folglich hat EVENTDATA immer NULL zurückgegeben, und allen SA-entsprechenden Benutzern wurde der Zugriff verweigert. In diesem Fall war die dedizierte Administratorverbindung nicht aktiviert. Es blieb daher keine andere Wahl als den Server mit den oben aufgeführten Startparametern neu zu starten, um den Trigger zu verwerfen.