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. Het volgende foutbericht wordt aan de gebruiker gerapporteerd:

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 volgende oplossingen gebruiken, afhankelijk van uw scenario:

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

Aanmeldingstriggers beheren

Geef alle aanmeldingstriggers op uw server weer:

SELECT name, is_disabled, create_date, modify_date
FROM sys.server_triggers
WHERE type_desc = 'LOGON';

Schakel een aanmeldingstrigger tijdelijk uit zonder deze te verwijderen:

DISABLE TRIGGER trigger_name ON ALL SERVER;

Een aanmeldingstrigger definitief verwijderen (verwijderen):

DROP TRIGGER trigger_name ON ALL SERVER;

Zie Triggerbeveiliging beheren voor meer informatie.

  • 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 die worden beschreven in Scenario 1. Aanmeldingstriggers hebben geen invloed op DAC-verbindingen. Zie voor meer informatie over DAC-verbinding: Diagnostische verbinding voor databasebeheerders.

    Als u wilt controleren of DAC is ingeschakeld, raadpleegt u het SQL Server-foutenlogboek. Zoek naar een bericht dat lijkt op dit voorbeeld:

    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: DAC is niet ingeschakeld op uw server en u hebt 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. Met deze actie wordt de aanmeldingstrigger uitgeschakeld en kunt u dezelfde herstelmaatregelen uitvoeren die worden beschreven in Scenario 1.

      Opmerking

      Voor deze procedure is een systeembeheerder (SA) of een gelijkwaardig beheerdersaccount vereist.

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

Meer informatie

Aanmeldingstriggers kunnen ook mislukken wanneer de EVENTDATA functie onjuist wordt gebruikt. De EVENTDATA functie retourneert XML en is hoofdlettergevoelig. Als u bijvoorbeeld de volgende aanmeldingstrigger maakt om de toegang te blokkeren op basis van IP-adres, kan fout 17892 optreden als het XML-pad onjuiste hoofdlettergebruik gebruikt:

 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

Als u niet de juiste hoofdlettergevoeligheid behoudt bij het kopiƫren van dit script, met name in dit deel van de trigger, mislukt de trigger:

-- Incorrect: lowercase 'event_instance' and 'clienthost' will cause EVENTDATA to return NULL
 SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');

Als gevolg hiervan retourneert EVENTDATA altijd NULL en worden alle equivalente SA-aanmeldingen geweigerd. Als de DAC-verbinding niet is ingeschakeld, moet u de server opnieuw opstarten met de opstartparameters die eerder zijn beschreven om de trigger te verwijderen.