Delen via


MSSQLSERVER_17892

Van toepassing op:SQL Server

Bijzonderheden

Eigenschap Waarde
Productnaam SQL Server
Gebeurtenis-id 17892
Bron van gebeurtenis MSSQLSERVER
Onderdeel SQLEngine
Symbolische naam SRV_LOGON_FAILED_BY_TRIGGER
Berichttekst Aanmelden is mislukt voor aanmeldingsnaam <> vanwege de uitvoering van de trigger.

Uitleg

Fout 17892 wordt gegenereerd wanneer een aanmeldingstriggercode niet kan worden uitgevoerd. Aanmelding activeert opgeslagen procedures als reactie op een AANMELDINGS-gebeurtenis. Deze gebeurtenis wordt gegenereerd wanneer een gebruikerssessie tot stand wordt gebracht met een exemplaar van SQL Server. Er wordt een foutbericht zoals het volgende gerapporteerd aan de gebruiker:

Msg 17892, niveau 14, status 1, serverservernaam<>, regel 1
Aanmelden is mislukt voor aanmeldingsnaam <> vanwege de uitvoering van de trigger.

Mogelijke oorzaken

Het probleem kan optreden als er een fout optreedt bij het uitvoeren van triggercode voor dat specifieke gebruikersaccount. Enkele van de scenario's zijn:

  • De trigger probeert gegevens in te voegen in een tabel die niet bestaat.
  • De aanmelding heeft geen machtigingen voor het object waarnaar wordt verwezen door de aanmeldingstrigger.

Gebruikersactie

U kunt een van de onderstaande oplossingen gebruiken, afhankelijk van het scenario waarin u zich bevindt.

  • Scenario 1: U hebt momenteel toegang tot een geopende sessie met SQL Server onder een beheerdersaccount

    In dit geval kunt u de corrigerende actie ondernemen die nodig is om uw triggercode op te lossen.

    • Voorbeeld 1: Als een object waarnaar wordt verwezen door de triggercode niet bestaat, maakt u dat object zodat de aanmeldingstrigger kan worden uitgevoerd.

    • Voorbeeld 2: Als een object waarnaar wordt verwezen door de triggercode bestaat, maar gebruikers geen machtigingen hebben, verleent u hen de benodigde bevoegdheden voor toegang tot het object.

    U kunt ook de aanmeldingstrigger verwijderen of uitschakelen, zodat gebruikers zich kunnen blijven aanmelden bij SQL Server.

  • Scenario 2: U hebt geen huidige sessie die is geopend onder beheerdersbevoegdheden, maar DAC (Dedicated Administrator Connection) is ingeschakeld op de SQL Server.

    In dit geval kunt u de DAC-verbinding gebruiken om dezelfde stappen uit te voeren als besproken in Case 1, omdat DAC-verbindingen niet worden beïnvloed door aanmeldingstriggers. Zie voor meer informatie over DAC-verbinding: Diagnostische verbinding voor databasebeheerders.

    Als u wilt controleren of DAC is ingeschakeld op uw SQL Server, kunt u het SQL Server-foutenlogboek controleren op een bericht dat er ongeveer als volgt uitziet:

    2020-02-09 16:17:44.150 Server Dedicated admin connection support is tot stand gebracht voor het lokaal luisteren op poort 1434.

  • Scenario 3: U hebt DAC niet ingeschakeld op uw server en geen bestaande beheersessie voor SQL Server.

    In dit scenario is de enige manier om het probleem op te lossen de volgende stappen uit te voeren:

    1. Stop SQL Server en gerelateerde services.

    2. Start SQL Server vanaf de opdrachtprompt met behulp van de opstartparameters -c, -men -f. Als u dit doet, wordt de aanmeldingstrigger uitgeschakeld en kunt u dezelfde herstelmaatregelen uitvoeren die worden besproken onder Case 1 hierboven.

      Opmerking

      Voor de bovenstaande procedure is een SA of een gelijkwaardig beheerdersaccount vereist.

      Zie voor meer informatie over deze en andere opstartopties: Opstartopties voor database-engineservice.

Meer informatie

Een andere situatie waarbij aanmeldingstriggers mislukken, is wanneer u de EVENTDATA functie gebruikt. Met deze functie worden XML en hoofdlettergevoelig geretourneerd. U maakt dus de volgende aanmeldingstrigger die de toegang wilt blokkeren op basis van ip-adres. U kunt het probleem oplossen:

 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

De gebruiker heeft geen case onderhouden bij het kopiëren van dit script vanaf internet op dit deel van de trigger:

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

Als gevolg hiervan EVENTDATA werd altijd NULL geretourneerd en werden alle bijbehorende SA-equivalente aanmeldingen geweigerd. In dit geval is de DAC-verbinding niet ingeschakeld, dus we hadden geen keuze om de server opnieuw op te starten met de bovenstaande opstartparameters om de trigger te verwijderen.