Знайдіть усіх IP-адрес або користувачів, які мають доступ до певного SQL-сервера


10

Скажімо, я знайшов SQL Server і не маю уявлення, які програми підключаються до нього. Можливо, я знайшов одне додаток, але я не впевнений, чи це єдиний, хто ним користується.

Чи є приємний спосіб знайти всі чіткі зв’язки?

Відповіді:


14

Ви можете подивитися поточно запущені процеси в SSMS в Моніторі діяльності.

Ви також можете отримати його за допомогою sys.dm_exec_sesions , а також 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 і інша інформація може бути отримана з JOIN в sys.dm_exec_connections на session_id: client_net_address, local_net_address, connect_time, порти, ...

sys.dm_exec_requests також може дати корисну інформацію: commandтип ,,sql_handle ...

Цей запит - лише зразок. Ви повинні JOINці 3 представлення разом і виводити / зберігати відповідну інформацію з будь-якого з них.

Дані з цього представлення не зникають при перезапуску SQL Server. Тому якщо програма не підключається регулярно, може бути гарною ідеєю зберігати їх регулярно, використовуючи завдання або сценарій (Powershell).


3

Я б також запропонував те, що запропонував Жюльєн, але, мабуть, планувати запит через агент SQL Server було б краще, і тоді кожен раз, коли він запускається, ви скидаєте інформацію у фізичну таблицю. Два ДМВ з'єднані 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 Server кожні 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 від Сарвеша Кумара Гупта :

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_adrex з'єднання, на якому він працює. Це може бути корисно в деяких випадках, але це не те, що тут потрібно, тим більше, що невідома програма не викликає цю функцію.
Жульєн Вавассер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.