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. 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:
Stop SQL Server en gerelateerde services.
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.