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:
Beenden Sie SQL Server und verwandte Dienste.
Starten Sie SQL Server über die Eingabeaufforderung mit den Startparametern
-c
,-m
und-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.