Dela via


MSSQLSERVER_17892

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:

    1. Stoppa SQL Server och relaterade tjänster.

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