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ı?
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:
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: command
type sql_handle
,, ...
Bu sorgu sadece bir örnektir. Sen gerekir JOIN
bu 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.
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_connections
vesys.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
.
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.
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