Скажімо, я знайшов SQL Server і не маю уявлення, які програми підключаються до нього. Можливо, я знайшов одне додаток, але я не впевнений, чи це єдиний, хто ним користується.
Чи є приємний спосіб знайти всі чіткі зв’язки?
Скажімо, я знайшов SQL Server і не маю уявлення, які програми підключаються до нього. Можливо, я знайшов одне додаток, але я не впевнений, чи це єдиний, хто ним користується.
Чи є приємний спосіб знайти всі чіткі зв’язки?
Відповіді:
Ви можете подивитися поточно запущені процеси в 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).
Я б також запропонував те, що запропонував Жюльєн, але, мабуть, планувати запит через агент 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
.
Увімкнути аудит входу в 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.
Від отримання 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