ค้นหา IP หรือผู้ใช้ทั้งหมดที่เข้าถึง SQL Server ที่ระบุ


10

สมมติว่าฉันพบ SQL Server และฉันไม่รู้ว่าแอปพลิเคชันใดที่เชื่อมต่อกับมัน บางทีฉันอาจพบแอปพลิเคชั่นเดียว แต่ฉันไม่แน่ใจว่าเป็นแอปพลิเคชั่นเดียวที่ใช้หรือไม่

มีวิธีที่ดีในการค้นหาการเชื่อมต่อที่แตกต่างกันทั้งหมดหรือไม่?

คำตอบ:


14

คุณสามารถดูกระบวนการที่กำลังทำงานอยู่ใน SSMS ในการตรวจสอบกิจกรรม

นอกจากนี้คุณยังจะได้รับมันใช้sys.dm_exec_sessionsเช่นเดียวกับsys.dm_exec_connectionsและsys.dm_exec_requests

ค้นหา:

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;

ชื่อโฮสต์ชื่อกระบวนการหรือชื่อผู้ใช้โดเมนมักจะให้ข้อมูลมากกว่าที่อยู่ IP คอลัมน์อื่น ๆ สามารถเพิ่มได้เช่น: login_time,last_successful_logon

IP และข้อมูลอื่น ๆ ที่สามารถเรียกดูได้ด้วยการเข้าร่วมsys.dm_exec_connectionsในsession_id: client_net_address, local_net_address, connect_timeพอร์ต ...

sys.dm_exec_requestsยังสามารถให้ข้อมูลที่เป็นประโยชน์: commandประเภทsql_handle,, ...

แบบสอบถามนี้เป็นเพียงตัวอย่าง คุณต้องดูJOINทั้งสามนี้ด้วยกันและส่งออก / เก็บข้อมูลที่เกี่ยวข้องจากหนึ่งในนั้น

ข้อมูลจากมุมมองเหล่านี้หายไปเมื่อรีสตาร์ท SQL Server ดังนั้นหากแอปพลิเคชันไม่ได้เชื่อมต่อเป็นประจำอาจเป็นความคิดที่ดีที่จะเก็บแอปพลิเคชันเหล่านี้เป็นประจำโดยใช้งานหรือสคริปต์ (Powershell)


3

ฉันจะแนะนำสิ่งที่ Julien แนะนำ แต่ฉันเดาว่าการตั้งเวลาการสืบค้นผ่าน SQL Server Agent น่าจะเป็นแนวคิดที่ดีกว่าและทุกครั้งที่คุณเรียกใช้การถ่ายโอนข้อมูลลงในตารางทางกายภาพ สอง DMV เข้าร่วมsys.dm_exec_connectionsและsys.dm_exec_sessions

เช่นแรกสร้างตารางทางกายภาพ

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

จากนั้นแทรกระเบียนลงในตารางนี้:

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;

กำหนดเวลานี้ทำงานผ่านทางตัวแทนของเซิร์ฟเวอร์ SQL ทุก 15 session_informationนาทีหรือมากกว่านั้นและในตอนท้ายของวันที่คุณสามารถมองเห็นทุกสิ่งที่คุณชอบจากตาราง


2

เปิดใช้งานการตรวจสอบการเข้าสู่ระบบ SQL Server สำหรับการเข้าสู่ระบบที่สำเร็จและล้มเหลว: https://docs.microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio

การเปลี่ยนขอบเขตการตรวจสอบจะต้องเริ่มบริการ SQL ใหม่ เมื่อบริการเริ่มต้นใหม่การเข้าสู่ระบบที่สำเร็จทั้งหมด (ผู้ใช้) และที่อยู่ IP ของมันจะเริ่มได้รับการบันทึกไว้ในบันทึกของ SQL Server ข้อมูลนี้สามารถรวบรวมได้ประมาณหนึ่งสัปดาห์หรือ 2 และจากนั้นจะวิเคราะห์ไฟล์บันทึกเพื่อแสดงรายการที่อยู่ IP (และผู้ใช้) ทั้งหมดที่มีการเข้าถึงฐานข้อมูล SQL Server ในช่วงระยะเวลาที่ตรวจสอบ

หากมีการติดตั้งคอมโพเนนต์ SSRS ไว้ในกล่องเดียวกันตาราง ExecutionLog ของฐานข้อมูล ReportServer สามารถวิเคราะห์เพื่อแสดงรายการการเข้าสู่ระบบทั้งหมดที่เข้าถึงพอร์ทัล SSRS


-2

จากรับที่อยู่ IP ของลูกค้าใน SQL Serverโดย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

สิ่งนี้จะคืนค่า client_net_address ของการเชื่อมโยงที่เรียกใช้ นี่อาจเป็นประโยชน์ในบางกรณี แต่ไม่ใช่สิ่งที่ต้องการที่นี่โดยเฉพาะอย่างยิ่งเนื่องจากแอปพลิเคชันที่ไม่รู้จักจะไม่เรียกใช้ฟังก์ชันนี้
Julien Vavasseur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.