सभी आईपी या उन उपयोगकर्ताओं को खोजें, जो एक विशिष्ट SQL सर्वर तक पहुंचते हैं


10

मान लीजिए कि मुझे एक SQL सर्वर मिला और मुझे पता नहीं है कि कौन से एप्लिकेशन इससे जुड़ते हैं। हो सकता है कि मुझे एक आवेदन मिल जाए, लेकिन मुझे यकीन नहीं है कि यह इसका उपयोग करने वाला एकमात्र है।

क्या सभी अलग-अलग कनेक्शन खोजने का एक अच्छा तरीका है?

जवाबों:


14

आप गतिविधि मॉनिटर में SSMS में वर्तमान में चल रही प्रक्रियाओं को देख सकते हैं।

आप इसे sysinos_exec_session के साथ-साथ sysinos_exec_connections और sysinos_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;

होस्टनाम, प्रक्रिया का नाम या डोमेन उपयोगकर्ता नाम अक्सर केवल एक आईपी पते की तुलना में अधिक जानकारी देते हैं। अन्य स्तंभों जैसे जोड़ा जा सकता है: login_time,last_successful_logon

आईपी और अन्य जानकारी के साथ एक के लिए शामिल हों प्राप्त किए जा सकें sys.dm_exec_connections पर session_id: client_net_address, local_net_address, connect_time, बंदरगाह, ...

sysinos_exec_requests उपयोगी जानकारी भी दे सकते हैं: commandप्रकार sql_handle, ...

यह क्वेरी सिर्फ एक नमूना है। आपको JOINइन 3 विचारों को एक साथ करना होगा और इन दोनों में से प्रासंगिक जानकारी को आउटपुट / स्टोर करना होगा।

SQL सर्वर पुनरारंभ होने पर इन दृश्य से डेटा गायब हो जाता है। इसलिए यदि आवेदन नियमित रूप से जुड़ा नहीं है, तो नौकरी या स्क्रिप्ट (पॉवर्सशेल) का उपयोग करके उन्हें नियमित आधार पर संग्रहीत करना एक अच्छा विचार हो सकता है।


3

मैं यह भी सुझाव दूंगा कि जूलियन ने क्या सुझाव दिया था, लेकिन मुझे लगता है कि SQL सर्वर एजेंट के माध्यम से क्वेरी को शेड्यूल करना बेहतर विचार होगा और फिर हर बार जब आप सूचनाओं को भौतिक तालिका में डंप करते हैं। दो 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 सर्वर लॉगिन ऑडिटिंग सक्षम करें: https://docs.microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio

ऑडिटिंग स्कोप को बदलने के लिए SQL सेवा पुनरारंभ की आवश्यकता होगी। एक बार सेवा पुनरारंभ हो जाने के बाद, सभी सफल लॉगिन (उपयोगकर्ता) और इसका आईपी पता SQL सर्वर लॉग में लॉग इन होना शुरू हो जाएगा। यह डेटा लगभग एक या 2 सप्ताह के लिए एकत्र किया जा सकता है और फिर लॉग फ़ाइल का विश्लेषण उन सभी आईपी पते (और उपयोगकर्ता) को सूचीबद्ध करने के लिए किया जा सकता है, जिन्होंने निगरानी अवधि के दौरान SQL सर्वर डेटाबेस तक पहुँचा है।

यदि SSRS घटक को भी उसी बॉक्स पर स्थापित किया गया है, तो ReportServer डेटाबेस के ExecutionLog तालिका का विश्लेषण SSRS पोर्टल तक पहुँचने वाले सभी लॉगिन को सूचीबद्ध करने के लिए किया जा सकता है।


-2

से एसक्यूएल सर्वर में प्राप्त क्लाइंट IP पते से सर्वेश कुमार गुप्ता :

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

इससे चलने वाले कंजेशन का क्लाइंट_नेट_ड्रेस वापस आ जाएगा। यह कुछ मामलों में उपयोगी हो सकता है लेकिन ऐसा नहीं है जो यहां आवश्यक है, खासकर जब से अज्ञात एप्लिकेशन इस फ़ंक्शन को कॉल नहीं करेगा।
जुलिएन वावससेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.