Est-il possible de savoir qui a utilisé une connexion SQL-Server?
Supposons que nous soupçonnons une personne pour abuser d'une connexion SQL censée être utilisée par une application uniquement pour vous connecter à SQL-Server. L'utilisateur de domaine qui a utilisé le login SQL est-il connecté n'importe où, afin que nous puissions faire une conclusion qui l'utilisait?
Vous pouvez utiliser DMVS pour voir qui est connecté à l'instant, mais cela ne vous fera aucune information historique.
SELECT c.session_id AS spid, c.auth_scheme, s.login_name,
s.[Host_name], c.client_net_address
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s ON c.session_id=s.session_id;
Je suppose que vous pouvez utiliser ce code dans un déclencheur de connexion et enregistrer les informations à une table, mais si vous avez besoin d'un journal exécuté, vous pouvez envisager d'examiner des événements étendus ou d'exécuter une trace (profileur SQL Server).
Non, si l'utilisateur se connecte à SQL Server à l'aide d'un identifiant d'authentification SQL, il n'existe aucun moyen de déterminer à partir de ce que Windows Login était responsable. SQL Server ne peut enregistrer que les informations fournies, et lorsque vous utilisez l'authentification SQL, aucune information de connexion Windows/domaine/groupe n'est transmise à SQL Server.
Vous pouvez regarder les DMV comme sys.dm_exec_sessions
et sys.dm_exec_connections
Pour obtenir d'autres informations justificatives, telles que l'adresse IP et le nom d'hôte, mais:
Vous ne pouvez même pas empêcher les utilisateurs de se connecter en tant que ce login d'authentification SQL, à moins que vous ne modifiez l'application pour utiliser Windows Auth et Désactiver SQL Auth. Bien sûr, vous pouvez configurer un déclencheur de connexion qui empêche la journalisation à moins que Host_Name et/ou PROGRAM_NAME se situe dans un ensemble de valeurs souhaitée, mais ces éléments sont très faciles à utiliser, donc si ce comportement est malveillant, vos options sont assez limitées.
Vous pouvez interroger sys.dm_exec_sessions
Pour connaître le nom d'hôte de la machine qui connecte à votre instance SQL Server avec le compte d'application. Si vous pouvez retrouver le nom d'hôte sur une machine utilisateur, vous devriez pouvoir déterminer WhoO utilise ce compte:
SELECT Host_name ,
program_name
FROM sys.dm_exec_sessions
WHERE login_name = 'service account'
Si nécessaire, vous pouvez effectuer un instantané de cette table toutes les 15 minutes, cependant, la session_id restera probablement active pendant un certain temps, à moins que l'utilisateur (AB) ne se déconnecte directement après avoir exécuté une requête.