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还可以提供有用的信息:commandtype 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