Допустим, я нашел SQL Server и понятия не имею, какие приложения к нему подключаются. Может быть, я найду одно приложение, но я не уверен, что оно единственное, которое его использует.
Есть ли хороший способ найти все отличные связи?
источник
Допустим, я нашел SQL Server и понятия не имею, какие приложения к нему подключаются. Может быть, я найду одно приложение, но я не уверен, что оно единственное, которое его использует.
Есть ли хороший способ найти все отличные связи?
Вы можете посмотреть на текущие процессы в SSMS в Activity Monitor.
Вы также можете получить его, используя 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 и другая информация может быть получена с JOIN в sys.dm_exec_connections на session_id
: client_net_address
, local_net_address
, connect_time
, порты, ...
sys.dm_exec_requests также может дать полезную информацию: command
type ,,sql_handle
...
Этот запрос является просто примером. Вы должны JOIN
объединить эти 3 вида и вывести / сохранить соответствующую информацию из любого из них.
Данные из этого представления исчезают при перезапуске SQL Server. Поэтому, если приложение не подключено регулярно, рекомендуется регулярно их хранить с помощью задания или сценария (Powershell).
Я также хотел бы предложить то, что предложил Жюльен, но я думаю, что планирование запроса с помощью агента SQL Server было бы лучшей идеей, и затем каждый раз, когда он запускается, вы сбрасываете информацию в физическую таблицу. Два 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 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 Client Address в SQL Server по Sarvesh Кумар Гупта :
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