Answers:
您可以在活动监视器中查看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等信息可以检索与JOIN来sys.dm_exec_connections于session_id
:client_net_address
,local_net_address
,connect_time
,港口,...
sys.dm_exec_requests还可以提供有用的信息:command
type sql_handle
,...
该查询只是一个示例。您必须JOIN
将这三个视图放在一起,并从它们两个中输出/存储相关信息。
重新启动SQL Server时,这些视图中的数据消失。因此,如果应用程序没有定期连接,则最好使用作业或脚本(Powershell)定期存储它们。
我也将建议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;
安排它每隔15分钟左右通过SQL Server代理运行一次,最终您可以从表中看到所需的所有内容session_information
。
为成功和失败的登录启用SQL Server登录审核:https : //docs.microsoft.com/zh-cn/sql/ssms/configure-login-auditing-sql-server-management-studio
更改审核范围将需要重新启动SQL服务。服务重新启动后,所有成功的登录名(用户)及其IP地址将开始在SQL Server日志中记录。可以收集大约一周或两周的数据,然后对日志文件进行分析,以列出在监视期间访问SQL Server数据库的所有IP地址(和用户)。
如果在同一框中还安装了SSRS组件,则可以分析ReportServer数据库的ExecutionLog表以列出访问SSRS门户的所有登录。
从SQL Server中获取客户端IP地址由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