web-dev-qa-db-fra.com

Rechercher toutes les adresses IP ou les utilisateurs qui accèdent à un serveur SQL spécifique

Disons que j'ai trouvé un serveur SQL et je n'ai aucune idée des applications qui s'y connectent. Peut-être que je trouve une application mais je ne sais pas si c'est la seule à l'utiliser.

Existe-t-il un bon moyen de trouver toutes les connexions distinctes?

10
RayofCommand

Vous pouvez consulter les processus en cours d'exécution dans SSMS dans Activity Monitor.

Vous pouvez également l'obtenir en utilisant sys.dm_exec_sessions ainsi que sys.dm_exec_connections et sys.dm_exec_requests .

Requete:

SELECT DB_NAME(database_id) as [DB]
    , login_name
    , nt_domain
    , nt_user_name
    , status
    , Host_name
    , program_name
    , COUNT(*) AS [Connections]
FROM sys.dm_exec_sessions
WHERE database_id > 0 -- OR 4 for user DBs
GROUP BY database_id, login_name, status, Host_name, program_name, nt_domain, nt_user_name;

Le nom d'hôte, le nom de processus ou les noms d'utilisateur de domaine donnent souvent plus d'informations qu'une simple adresse IP. D'autres colonnes peuvent être ajoutées telles que: login_time, last_successful_logon

L'IP et d'autres informations peuvent être récupérées avec un JOIN à sys.dm_exec_connections on session_id: client_net_address, local_net_address, connect_time, ports, ...

sys.dm_exec_requests peut également fournir des informations utiles: command type, sql_handle, ...

Cette requête n'est qu'un exemple. Vous devez JOIN ces 3 vues ensemble et sortir/stocker les informations pertinentes de l'une ou l'autre.

Les données de ces vues disparaissent lorsque SQL Server est redémarré. Par conséquent, si l'application n'est pas régulièrement connectée, il peut être judicieux de les stocker régulièrement à l'aide d'un travail ou d'un script (Powershell).

14
Julien Vavasseur

Je suggérerais également ce que Julien a suggéré, mais je suppose que la planification de la requête via SQL Server Agent serait une meilleure idée, puis à chaque fois qu'il s'exécute, vous videz les informations dans une table physique. Deux DMV sont joints sys.dm_exec_connections et sys.dm_exec_sessions

Comme d'abord créer une table physique

create table Session_Information 
( session_id int,
net_transport nvarchar(40),
Host_name nvarchar(128),
program_name nvarchar(128),
nt_user_name nvarchar(128), 
connect_time datetime,
client_interface_name  nvarchar(128),
client_net_address varchar(48),
local_net_address varchar(48),
login_name nvarchar(128),
nt_domain nvarchar(128),
login_time datetime
);

Insérez ensuite des enregistrements dans ce tableau:

Insert into Session_Information
  SELECT 
      c.session_id, 
      c.net_transport, 
      s.Host_name, 
      s.program_name, 
      s.nt_user_name,
      c.connect_time, 
      s.client_interface_name,
      c.client_net_address,
      c.local_net_address, 
      s.login_name, 
      s.nt_domain, 
      s.login_time 
  FROM sys.dm_exec_connections AS c
  JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id;

Planifiez cette exécution via SQL Server Agent toutes les 15 minutes environ et, à la fin de la journée, vous pouvez voir tout ce que vous aimez dans le tableau session_information.

3
Shanky

Activez l'audit de connexion SQL Server pour les connexions réussies et échouées: https://docs.Microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio

La modification de l'étendue de l'audit nécessiterait un redémarrage du service SQL. Une fois le service redémarré, toutes les connexions réussies (utilisateur) et son adresse IP commenceront à être enregistrés dans les journaux SQL Server. Ces données peuvent être collectées pendant environ une semaine ou 2, puis le fichier journal peut être analysé pour répertorier toutes les adresses IP (et l'utilisateur) qui ont accédé aux bases de données SQL Server pendant la période surveillée.

Si le composant SSRS est également installé sur la même boîte, la table ExecutionLog de la base de données ReportServer peut être analysée pour répertorier toutes les connexions qui accèdent au portail SSRS.

2
Masood Hashim