我的工作公司有一个MSSQL服务器2005.我有两个问题,关于找出当前的日志用户以及发送警告消息的任何方式:
第一个问题是,是否有任何T-SQL或SP可用于查找当前登录用户名和机器名。如果用户使用SQL Server sa名称远程访问SQL Server,有没有办法找出该用户的Windows名称(登录到Windows的名称)?
我的下一个问题是,如果我可以获取用户名或ID,是否有任何方法可以发出警告消息,例如“当前SQL服务器正在清理或备份,请不要在此时登录”。我想这可能很难。我可能需要向用户发送电子邮件。
只能在公司中访问SQL服务器。 SQL服务器有一个用户列表作为登录用户:Windows用户,SQL用户和sa。
答案 0 :(得分:33)
SELECT SUSER_SNAME(), HOST_NAME()
如果连接是“sa”(或任何其他SQL登录),则无法找到域/ windows用户名。 SQL Server只知道它是“sa”或SQL登录。
HOST_NAME可能也不可靠,可以在连接字符串(“应用程序名称”)中设置。或者它可能是模糊的,例如“Microsoft Office”默认为Access,Excel等
您可以通过sys.dm_exec_connections
中的client_net_address
回溯并将MAC地址与IP匹配,并找出登录的用户...
答案 1 :(得分:4)
找出主机和用户的简单方法是
EXEC sp_who2;
你可以获得一些其他可以很好知道的信息,就好像用户是活跃的等等...... 它没有解决gbn宣布的问题。
答案 2 :(得分:3)
首先感谢您的所有建议。我尝试了所有的方法,我认为Joakim Backman的方法符合我的需要。以下是我发现的摘要。
为了获取我在SP中使用的信息,我必须过滤并将信息与其他表(例如电子邮件)连接。这是我使用的代码:
DECLARE @retTable TABLE (
SPID int not null
, Status varchar (255) not null
, Login varchar (255) not null
, HostName varchar (255) not null
, BlkBy varchar(10) not null
, DBName varchar (255) null
, Command varchar (255) not null
, CPUTime int not null
, DiskIO int not null
, LastBatch varchar (255) not null
, ProgramName varchar (255) null
, SPID2 int not null
, REQUESTID INT
)
INSERT INTO @retTable EXEC sp_who2
SELECT Status, Login, HostName, DBName, Command, CPUTime, ProgramName -- *
FROM @retTable
--WHERE Login not like 'sa%' -- if not interested in sa
ORDER BY Login, HostName