web-dev-qa-db-fra.com

La connexion a échoué pour la connexion en raison de l'exécution du déclencheur

J'ai essayé de me connecter en utilisant l'un de mes sql server logins mais je reçois le message d'erreur ci-dessous:

Message d'erreur général

enter image description here

Copier le texte du message

TITLE: Connect to Server
------------------------------

Cannot connect to MY_SERVER.

------------------------------
ADDITIONAL INFORMATION:

Logon failed for login 'cola' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english. (Microsoft SQL Server, Error: 17892)

For help, click: http://go.Microsoft.com/fwlink?> ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=17892&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------

Informations avancées

enter image description here

Je suis conscient de la question ci-dessous mais elle est légèrement différente et j'ai essayé tout ce qui y est dit et cela n'a pas fonctionné pour moi, c'est pourquoi je pose cette question ici:

"La connexion a échoué pour la connexion 'sa' en raison de l'exécution du déclencheur." Lorsque Non SA Déclencheurs de connexion définis

Cette question ici est également très similaire:

Échec de la connexion pour l'utilisateur - Erreur: 18456, gravité: 14, état: 38

Et de celui-ci, j'ai obtenu les informations suivantes:

Échec de la connexion pour l'utilisateur - Erreur 18456 - Gravité 14, état 38

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Selon les informations ci-dessus, j'ai le problème suivant:

Connexion valide mais échec de l'accès au serveur

Toujours pas de joie.

J'ai essayé de supprimer la connexion et de la recréer, mais j'ai rencontré un Login can not be dropped because it is in use.

J'ai utilisé le script ci-dessous pour découvrir where it is used, by whom, from where:

USE master
go
SELECT 
        sdes.session_id 
       ,sdes.login_time 
       ,sdes.last_request_start_time
       ,sdes.last_request_end_time
       ,sdes.is_user_process
       ,sdes.Host_name
       ,sdes.program_name
       ,sdes.login_name
       ,sdes.status

       ,sdec.num_reads
       ,sdec.num_writes
       ,sdec.last_read
       ,sdec.last_write
       ,sdes.reads
       ,sdes.logical_reads
       ,sdes.writes

       ,sdest.DatabaseName 
       ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec 
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

                SELECT DB_NAME(dbid) AS DatabaseName
                    ,OBJECT_NAME(objectid) AS ObjName
                    ,COALESCE((
                            SELECT TEXT AS [processing-instruction(definition)]
                            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle) 
                            FOR XML PATH('')
                                ,TYPE
                            ), '') AS Query

                FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

    ) sdest
WHERE sdes.session_id <> @@SPID 
--ORDER BY sdes.last_request_start_time DESC

J'ai ensuite tué les 2 sessions, recréé la connexion, réessayé, même erreur.

Qu'est-ce que je rate?

2
Marcello Miorelli

Selon les captures d'écran que vous avez publiées, vous rencontrez une erreur 17892 qui se traduit en gros par une erreur de déclenchement de connexion.

Vous avez peut-être déjà eu un déclencheur d'ouverture de session qui a évalué si vous étiez autorisé à vous connecter à SQL Server ou non. Ce déclencheur a peut-être été supprimé ou peut produire des résultats incorrects qui ne permettent désormais à personne de se connecter à l'instance SQL Server.

Il existe trois solutions possibles:

1. Ouvrir la fenêtre de requête disponible

Recherchez le déclencheur via:

SELECT * FROM sys.server_triggers;

Si vous voyez un déclencheur au niveau du serveur qui pourrait être responsable des problèmes de connexion, vous pouvez le supprimer avec:

DROP TRIGGER triggername ON ALL SERVER;

Au lieu de supprimer le déclencheur, désactivez-le simplement avec:

DISABLE TRIGGER triggername ON ALL SERVER;

2. DAC autorisé; Aucune fenêtre de requête ouverte disponible

Si vous n'avez pas de fenêtre de requête ouverte, vous devrez vous connecter à votre instance SQL Server avec une connexion DAC (ADMIN):

sqlcmd –S 127.0.0.1,1434 

1434 est le port par défaut pour la connexion DAC

Vous pouvez ensuite exécuter les requêtes ci-dessus à partir de la solution 1. pour déterminer le déclencheur, puis supprimer ou désactiver le déclencheur.

3. Aucune fenêtre de requête ouverte; Aucun DAC autorisé

Si vous n'avez pas de fenêtre ouverte et que DAC n'a pas été activé, vous devrez arrêter l'instance et recommencer à l'aide des étapes suivantes:

sqlserver.exe –c -m –f

Cela vous permettra de démarrer l'instance en mode mono-utilisateur avec une configuration minimale et un temps de démarrage plus court.

Ensuite, vous pouvez désactiver les déclencheurs selon l'étape 1. ci-dessus.

3
John aka hot2use