我想从 SQL Server 会话中获取用户所有可能的详细信息,例如用户 ip、主机名等。我已经搜索了
sp_who
。任何专家都可以指导我如何实现这一目标?找了很多都没找到大师作品
也许我完全不知道你在期待什么
但这可能对你有帮助
试试这个
SELECT *
FROM sys.sysprocesses
WHERE spid = @@SPID
在此我们可以找到用户名、主机等;
我个人不使用 sys.sysprocesses,并且根本不希望它在我的生产服务器上运行。
替代方案,但不是唯一的解决方案 您可以尝试运行以下查询:
set nocount on
set transaction isolation level read uncommitted
-------------------------------------------------------------------
declare @sp_who2 table (
SPID int,
status varchar(50),
login varchar(100),
HostName varchar(100),
BlkBy varchar(100),
DBName varchar(100),
Command varchar(100),
CPUTime int,
DiskIO int,
LastBatch varchar(50),
ProgramName varchar(150),
SPID2 int,
REQUESTID int
)
insert @sp_who2
exec sp_who2
select
-- https://docs.microsoft.com/en-us/sql/t-sql/functions/connectionproperty-transact-sql?view=sql-server-2017
CONNECTIONPROPERTY('net_transport') AS net_transport,
CONNECTIONPROPERTY('protocol_type') AS protocol_type,
CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
CONNECTIONPROPERTY('local_net_address') AS local_net_address,
CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
CONNECTIONPROPERTY('client_net_address') AS client_net_address,
HOST_NAME() AS client_hostname,
SUSER_NAME() LoggedInUser,
@@servername AS 'ServerName\InstanceName',
-- https://docs.microsoft.com/en-us/sql/t-sql/functions/serverproperty-transact-sql?view=sql-server-2017
SERVERPROPERTY('ServerName') AS 'ServerName',
SERVERPROPERTY('MachineName') AS 'Windows_MachineName',
SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS 'NetBIOS_Name',
SERVERPROPERTY('instanceName') AS 'InstanceName',
SERVERPROPERTY('IsClustered') AS 'IsClustered',
SERVERPROPERTY('Edition') AS 'Edition',
-- https://docs.microsoft.com/en-us/sql/t-sql/functions/version-transact-sql-configuration-functions?view=sql-server-2017
@@Version as 'Full_Server_Version',
[Server Name]=@@servername,
BlkBy, *
from @sp_who2 s
inner join sys.dm_exec_sessions sdes
on s.spid = sdes.session_id
left outer join sys.dm_exec_connections c
on sdes.session_id = c.session_id
OUTER APPLY (
SELECT DB_NAME(dbid) AS DatabaseName
,OBJECT_NAME(objectid) AS ObjName
,COALESCE((
SELECT TEXT AS [processing-instruction(definition)]
FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)
FOR XML PATH('')
,TYPE
), '') AS Query
FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)
) sdest
它在我的所有服务器(sql server 2016)上运行良好,希望它也能在你的服务器上运行良好。