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 Instanz von SQL Servererstellt 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.
Benutzeraktion
Abhängig von dem Szenario, in dem Sie sich befinden, können Sie eine der folgenden Lösungen verwenden.
Szenario 1: Sie haben derzeit über ein Administratorkonto Zugriff auf eine geöffnete SQL Server-Sitzung.
In diesem Fall können Sie die erforderlichen Korrekturmaßnahmen zum Korrigieren des Triggercodes ergreifen.
Beispiel 1: Wenn ein Objekt, auf das der Triggercode verweist, nicht vorhanden ist, erstellen Sie dieses Objekt, damit der Anmeldetrigger erfolgreich ausgeführt werden kann.
Beispiel 2: Wenn ein Objekt, auf das der Triggercode verweist, vorhanden ist, die Benutzer jedoch über keine entsprechenden Berechtigungen verfügen, geben Sie diesen die für den Zugriff auf das Objekt erforderlichen Berechtigungen.
Alternativ können Sie einfach den Anmeldetrigger verwerfen oder deaktivieren, sodass sich Benutzer weiterhin bei SQL Server anmelden können.
Szenario 2: Sie haben derzeit keine Sitzung mit Administratorrechten geöffnet, die dedizierte Administratorverbindung (DAC) ist auf der SQL Server-Instanz jedoch 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 dedizierten Administratorverbindung finden Sie unter folgendem Link: Diagnoseverbindung für Datenbankadministratoren
Sie können das SQL Server-Fehlerprotokoll auf eine Meldung ähnlich der folgenden überprüfen, um herauszufinden, ob die DAC auf Ihrer SQL Server-Instanz aktiviert ist:
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 haben weder die DAC auf Ihrem Server aktiviert noch verfügen Sie über eine bestehende SQL Server-Administratorsitzung.
In diesem Szenario sind die folgenden Schritte die einzige Möglichkeit, das Problem zu beheben:
Halten Sie SQL Server und zugehörige Dienste an.
Starten Sie SQL Server über die Eingabeaufforderung, indem Sie die Startparameter
-c
,-m
und-f
verwenden. 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 dem folgenden Link: Startoptionen für den Datenbank-Engine-Dienst
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 und den Zugriff basierend auf der IP-Adresse blockieren möchten, können Sie auf das Problem gestoßen sein:
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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für