如何从 SQL Server 会话中获取用户详细信息,如用户 ip、主机名等

问题描述 投票:0回答:2

我想从 SQL Server 会话中获取用户所有可能的详细信息,例如用户 ip、主机名等。我已经搜索了

sp_who
。任何专家都可以指导我如何实现这一目标?找了很多都没找到大师作品

sql-server database
2个回答
8
投票

也许我完全不知道你在期待什么

但这可能对你有帮助

试试这个

SELECT *
FROM sys.sysprocesses 
WHERE spid = @@SPID

在此我们可以找到用户名、主机等;


0
投票

我个人不使用 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)上运行良好,希望它也能在你的服务器上运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.