[SQL Server] SQL SERVER – Fix : Error : 17892 Logon failed for login due to trigger execution. Changed database context to ‘master’.
Recréons le scénario d'abord et essayons de résoudre le problème.
/* Create Audit Database */
CREATE DATABASE AuditDb
GO
USE AuditDb
GO
/* Create Audit Table */
CREATE TABLE ServerLogonHistory
(SystemUser VARCHAR(512),
DBUser VARCHAR(512),
SPID INT,
LogonTime DATETIME)
GO
/* Create Logon Trigger */
CREATE TRIGGER Tr_ServerLogon
ON ALL SERVER FOR LOGON
AS
BEGIN
INSERT INTO AuditDb.dbo.ServerLogonHistory
SELECT SYSTEM_USER,USER,@@SPID,GETDATE()
END
GO
/* Dropping Database AuditDB */
/* Please note login to Server again will
Produce Errors */
USE master
GO
DROP DATABASE AuditDB
GO
Une fois la base de données abandonnée et vous essayez de se connecter à nouveau, l'erreur suivante s'affiche.
L'ouverture de session a échoué pour la connexion 'SQL \ Pinal' en raison de l'exécution du déclencheur.
Changé le contexte de la base de données sur «master».
Modification du paramètre de langue pour nous. (Microsoft SQL Server, Erreur: 17892)
Cette erreur aurait pu être évitée si le déclencheur a été supprimé avant de quitter la base de données.
USE master
GO
DROP TRIGGER Tr_ServerLogon ON ALL SERVER
GO
Maintenant, il ne sera pas possible d'ouvrir une session sur la base de données à l'aide de SQL Server Management Studio. La seule façon de résoudre ce problème est l'utilisation de DAC. Lisez plus de détails sur le DAC à l' aide d'une connexion dédiée aux administrateurs dédiés à Kill Current Running Query . Permettez-nous d'examiner l'exemple dans notre cas où j'utilise l'authentification Windows pour me connecter au système.
1- Démarrer le serveur en mode mono utilisateur (ajouter –m dans le service et redémarrer le serveur)
2- Se connecter à SQL Server via sqlcmd :
C: \Users\Zouhaier> sqlcmd -S LocalHost -d master -A
3- Afficher la liste des triggers :
C:\Users\zouhaier>sqlcmd -S LocalHost -d master -A
SELECT
SSM.definition
FROM
sys.server_triggers AS ST JOIN
sys.server_sql_modules AS SSM
ON ST.object_id = SSM.object_id
go
4- Supprimer le trigger concerné :
C: \Users\Zouhaier> sqlcmd -S LocalHost -d master -A
1> DROP TRIGGER Tr_ServerLogon ON ALL SERVER
2> GO