web-dev-qa-db-fra.com

Qui est la personne utilisant un login SQL?

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?

5
Magier

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).

3
Daniel Hutmacher

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 faire que cela à l'avenir, vous ne pouvez pas regarder en arrière dans le temps, à moins que vous ne collectioniez spécifiquement ces informations (vous pouvez le faire maintenant avec une trace côté serveur, ou un déclencheur d'ouverture de la connexion ou une vérification, ou. ..)
  • Cela vous aidera que si l'utilisateur se connecte directement à SQL Server à partir de leur poste de travail. Si vos utilisateurs utilisent une boîte de saut dans le centre de données ou ont un accès commun à d'autres machines, vous pourrez raconter la machine à laquelle ils venaient, mais pas quel utilisateur Windows a été connecté dans la boîte à l'époque. Si vous savez exactement lorsque le changement s'est produit sur SQL Server, vous pourrez peut-être être en mesure de corréler cette heure avec les journaux sur la machine pour déterminer quel utilisateur était utilisé.

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.

7
Aaron Bertrand

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.

3
Alex