Belirli bir SQL Server'a erişen tüm IP'leri veya kullanıcıları bulun


10

Bir SQL Server bulduğumu ve hangi uygulamaların ona bağlandığını bilmediğimizi varsayalım. Belki bir uygulama buluyorum ama onu kullanan tek uygulama olup olmadığından emin değilim.

Tüm farklı bağlantıları bulmanın güzel bir yolu var mı?

Yanıtlar:


14

Etkinlik İzleyicisi'nde SSMS'de şu anda çalışan işlemlere bakabilirsiniz.

Ayrıca sys.dm_exec_sessions yanı sıra sys.dm_exec_connections ve sys.dm_exec_requests kullanarak alabilirsiniz .

Sorgu:

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;

Ana bilgisayar adı, işlem adı veya etki alanı kullanıcı adları genellikle bir IP adresinden daha fazla bilgi verir. Diğer sütunlar gibi eklenebilir: login_time,last_successful_logon

A JOIN IP ve diğer bilgileri alınabilir sys.dm_exec_connections üzerinde session_id: client_net_address, local_net_address, connect_time, limanlar, ...

sys.dm_exec_requests ayrıca yararlı bilgiler verebilir: commandtype sql_handle,, ...

Bu sorgu sadece bir örnektir. Sen gerekir JOINbu 3 görünümler birbirine ve ikisinden çıktısı / mağaza ilgili bilgiler.

SQL Server yeniden başlatıldığında bu görünümdeki veriler kaybolur. Bu nedenle, uygulama düzenli olarak bağlanmazsa, bir iş veya komut dosyası (Powershell) kullanarak düzenli olarak saklamak iyi bir fikir olabilir.


3

Ayrıca Julien ne önerdi ama SQL Server Aracısı aracılığıyla sorguyu zamanlama daha iyi bir fikir olacağını tahmin ve daha sonra her zaman fiziksel bir tabloya bilgi dökümü. İki DMV birleştirilir sys.dm_exec_connectionsvesys.dm_exec_sessions

Önce fiziksel bir tablo oluşturun

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

Ardından bu tabloya kayıt ekleyin:

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;

Bunu SQL Server Agent ile her 15 dakikada bir çalışacak şekilde zamanlayın ve günün sonunda tablodan istediğiniz her şeyi görebilirsiniz session_information.


2

Başarılı ve başarısız girişler için SQL Server oturum açma denetimini etkinleştirin: https://docs.microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio

Denetim kapsamını değiştirmek için SQL hizmetinin yeniden başlatılması gerekir. Hizmet yeniden başlatıldığında, tüm başarılı girişler (kullanıcı) ve IP Adresi SQL Server günlüklerinde oturum açmaya başlar. Bu veriler yaklaşık bir hafta veya 2 hafta boyunca toplanabilir ve daha sonra günlük dosyası, izlenen süre boyunca SQL Server veritabanlarına erişen tüm IP Adreslerini (ve kullanıcıyı) listelemek için analiz edilir.

SSRS bileşeni de aynı kutuya yüklenirse, SSRS portalına erişen tüm girişleri listelemek için ReportServer veritabanının ExecutionLog tablosu analiz edilebilir.


-2

Gönderen SQL Server al İstemci IP Adresi ile 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

Bu, onu çalıştıran bağlantının client_net_address adresini döndürür. Bu bazı durumlarda yararlı olabilir, ancak özellikle bilinmeyen uygulama bu işlevi çağırmayacağı için burada gerekli değildir.
Julien Vavasseur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.