Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
Stop SQL Server en gerelateerde services.
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.