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:
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 ------------------------------
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:
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?
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:
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;
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.
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.