Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Detaljer
| Egenskap | Värde |
|---|---|
| Produktnamn | SQL Server |
| Händelse-ID | 17892 |
| Händelsekälla | MSSQLSERVER |
| Komponent | SQLEngine |
| Symboliskt namn | SRV_LOGON_FAILED_BY_TRIGGER |
| Meddelandetext | Inloggningen misslyckades för inloggningens <inloggningsnamn> på grund av utlösarkörning. |
Förklaring
Fel 17892 utlöses när en inloggningsutlösarkod inte kan köras korrekt. Inloggning utlöser brand lagrade procedurer som svar på en INLOGGNINGshändelse. Den här händelsen utlöses när en användarsession upprättas med en instans av SQL Server. Ett felmeddelande som liknar följande rapporteras till användaren:
Msg 17892, nivå 14, delstat 1, serverservernamn<>, rad 1
Inloggningen misslyckades för inloggningens <inloggningsnamn> på grund av utlösarkörning.
Möjliga orsaker
Problemet kan uppstå om det uppstår ett fel vid körning av utlösarkod för det specifika användarkontot. Några av scenarierna är:
- Utlösaren försöker infoga data i en tabell som inte finns.
- Inloggningen har inte behörighet till det objekt som refereras till av inloggningsutlösaren.
Användaråtgärd
Du kan använda någon av lösningarna nedan beroende på vilket scenario du befinner dig i.
Scenario 1: Du har för närvarande åtkomst till en öppen session till SQL Server under ett administratörskonto
I det här fallet kan du vidta den korrigerande åtgärd som krävs för att åtgärda utlösarkoden.
Exempel 1: Om ett objekt som anges av utlösarkoden inte finns skapar du objektet så att inloggningsutlösaren kan köras korrekt.
Exempel 2: Om ett objekt som anges av utlösarkoden finns men användarna inte har behörighet, ger du dem de behörigheter som krävs för att få åtkomst till objektet.
Du kan också bara släppa eller inaktivera inloggningsutlösaren så att användarna kan fortsätta att logga in på SQL Server.
Scenario 2: Du har ingen aktuell session som är öppen under administratörsbehörighet, men dedikerad administratörsanslutning (DAC) är aktiverad på SQL Server.
I det här fallet kan du använda DAC-anslutningen för att vidta samma steg som beskrivs i ärende 1 eftersom DAC-anslutningar inte påverkas av inloggningsutlösare. Mer information om DAC-anslutning finns i: Diagnostikanslutning för databasadministratörer.
Om du vill kontrollera om DAC är aktiverat på din SQL Server kan du kontrollera SQL Server-felloggen för ett meddelande som liknar följande:
2020-02-09 16:17:44.150 Server Dedikerad administratörsanslutning har upprättats för att lyssna lokalt på port 1434.
Scenario 3: Du har varken DAC aktiverat på servern eller en befintlig administratörssession till SQL Server.
I det här scenariot är det enda sättet att åtgärda problemet att vidta följande steg:
Stoppa SQL Server och relaterade tjänster.
Starta SQL Server från kommandotolken med startparametrarna
-c,-moch-f. Om du gör det inaktiveras inloggningsutlösaren och du kan utföra samma åtgärdsåtgärder som beskrivs i ärende 1 ovan.Anmärkning
Proceduren ovan kräver ett SA eller ett motsvarande administratörskonto.
Mer information om dessa och andra startalternativ finns i: Startalternativ för databasmotortjänsten.
Mer information
En annan situation där inloggningsutlösare misslyckas är när du använder EVENTDATA funktionen. Den här funktionen returnerar XML och dess skiftlägeskänsliga. Så du skapar följande inloggningsutlösare, som avser att blockera åtkomst baserat på IP-adress, du kan stöta på problemet:
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
Användaren underhåller inte ärendet när det här skriptet kopieras från Internet på den här delen av utlösaren:
SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');
Därför EVENTDATA returnerade alltid NULL och alla deras SA-motsvarande inloggningar nekades åtkomst. I det här fallet var DAC-anslutningen inte aktiverad, så vi hade inget annat val än att starta om servern med startparametrarna ovan för att släppa utlösaren.