Suchen Sie alle IPs oder Benutzer, die auf einen bestimmten SQL Server zugreifen


10

Angenommen, ich habe einen SQL Server gefunden und weiß nicht, welche Anwendungen eine Verbindung dazu herstellen. Vielleicht finde ich eine Anwendung, bin mir aber nicht sicher, ob es die einzige ist, die sie verwendet.

Gibt es eine gute Möglichkeit, alle unterschiedlichen Verbindungen zu finden?

Antworten:


14

Sie können die aktuell ausgeführten Prozesse in SSMS im Aktivitätsmonitor anzeigen.

Sie können es auch mit sys.dm_exec_sessions sowie sys.dm_exec_connections und sys.dm_exec_requests abrufen .

Abfrage:

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;

Hostname, Prozessname oder Domänenbenutzernamen enthalten häufig mehr Informationen als nur eine IP-Adresse. Andere Spalten können hinzugefügt werden, wie zum Beispiel:login_time ,last_successful_logon

IP und andere Informationen können mit einem JOIN abgerufen werden sys.dm_exec_connections auf session_id: client_net_address, local_net_address, connect_time, Häfen, ...

sys.dm_exec_requests kann auch nützliche Informationen enthalten: commandtype ,,sql_handle ...

Diese Abfrage ist nur ein Beispiel. Sie müssen JOINdiese 3 Ansichten zusammen verwenden und relevante Informationen von beiden ausgeben / speichern.

Daten aus dieser Ansicht werden beim Neustart von SQL Server nicht mehr angezeigt. Wenn die Anwendung nicht regelmäßig verbunden ist, empfiehlt es sich daher, sie regelmäßig mithilfe eines Jobs oder eines Skripts (Powershell) zu speichern.


3

Ich würde auch vorschlagen, was Julien vorgeschlagen hat, aber ich denke, die Planung der Abfrage über den SQL Server-Agenten wäre eine bessere Idee, und jedes Mal, wenn sie ausgeführt wird, werden die Informationen in eine physische Tabelle geschrieben. Zwei DMVs sind verbunden sys.dm_exec_connectionsundsys.dm_exec_sessions

Erstellen Sie zunächst eine physische Tabelle

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

Fügen Sie dann Datensätze in diese Tabelle ein:

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;

Planen Sie dies so, dass es etwa alle 15 Minuten über den SQL Server-Agenten ausgeführt wird. Am Ende des Tages können Sie in der Tabelle alles sehen, was Ihnen gefällt session_information.


2

Aktivieren Sie die SQL Server-Anmeldeüberwachung für erfolgreiche und fehlgeschlagene Anmeldungen: https://docs.microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio

Das Ändern des Überwachungsbereichs würde einen Neustart des SQL-Dienstes erfordern. Nach dem Neustart des Dienstes werden alle erfolgreichen Anmeldungen (Benutzer) und ihre IP-Adresse in SQL Server-Protokollen protokolliert. Diese Daten können für etwa eine oder zwei Wochen gesammelt und anschließend die Protokolldatei analysiert werden, um alle IP-Adressen (und Benutzer) aufzulisten, die während des überwachten Zeitraums auf SQL Server-Datenbanken zugegriffen haben.

Wenn die SSRS-Komponente ebenfalls in derselben Box installiert ist, kann die ExecutionLog-Tabelle der ReportServer-Datenbank analysiert werden, um alle Anmeldungen aufzulisten, die auf das SSRS-Portal zugreifen.


-2

Von Get Client IP Address in SQL Server von Sarvesh Kumar Gupta :

CREATE FUNCTION [dbo].[GetCurrentIP] ()
RETURNS varchar(255)
AS
BEGIN
    DECLARE @IP_Address varchar(255);

   SELECT @IP_Address = client_net_address
    FROM sys.dm_exec_connections
    WHERE Session_id = @@SPID;

   Return @IP_Address;
END

Dies gibt die client_net_address der Verbindung zurück, auf der sie ausgeführt wird. Dies kann in einigen Fällen nützlich sein, wird hier jedoch nicht benötigt, zumal die unbekannte Anwendung diese Funktion nicht aufruft.
Julien Vavasseur
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.