我们按工作站数量许可我们的软件。
我有一个多年来一直使用的查询,用于获得登录到我的SQL Server数据库的工作站的准确计数。为简单起见,所有用户都使用相同的登录名/密码。这内置于附加到数据库的脚本中。他们只能访问该数据库,但
USE [Master] GRANT VIEW SERVER STATE to MyUser已经生效的查询如下:
SELECT COUNT(Users) AS UserCount FROM (SELECT COUNT(Master.dbo.sysprocesses.hostname) AS Users FROM Master.dbo.sysprocesses LEFT OUTER JOIN Master.dbo.sysdatabases ON Master.dbo.sysdatabases.dbid = Master.dbo.sysprocesses.dbid WHERE (Master.dbo.sysdatabases.name = 'MyDatabase') GROUP BY Master.dbo.sysprocesses.net_address) AS UserCount_1这基本上依赖于mac地址(Master.dbo.sysprocesses.net_address),因为工作站名称和ip地址都可以重复。
最近,这在许多客户中停止了工作。突然间,单个工作站显示同一工作站的多个网络地址,导致用户数量大大增加。这可能与SQL Server 2012有关-不确定。
我需要的是一种非常可靠的方式来获得登录到我的数据库的工作站数量。
如果有人能告诉我为什么我突然为每个工作站获得多个net_addresses,以及如何防止这种情况发生,那将是一个可能的解决方案。
否则,如果有人能给我一个坚如磐石的方法来获得工作站数量,而不是上面提到的,那就太好了。顺便说一下,我们最大的客户是50个用户。
下面是一个示例:
SELECT Master.dbo.sysprocesses.hostname AS Users, Master.dbo.sysprocesses.net_address FROM Master.dbo.sysprocesses
LEFT OUTER JOIN Master.dbo.sysdatabases ON Master.dbo.sysdatabases.dbid = Master.dbo.sysprocesses.dbid
WHERE Master.dbo.sysdatabases.name = 'mydb' GROUP BY Master.dbo.sysprocesses.hostname, Master.dbo.sysprocesses.net_address返回:
DAVID-PC 001CC490239E
FLOOR1 001CC41D8012
FLOOR2 CB8FEE6C5856
FLOOR3 A50B18FF1516
KER-PC7 6C626DEA68CC
LIZ-PC A4E553460E35
LIZ-PC EFE3F0E20260
LIZ-PC FD32F7B30360
PAP 9D35A704C29C
PAP CFB724BA1183
PAP D1A58A8878E6
PAP E9B116CA34B8
PAP F38B335A7AE6提前感谢您的帮助。
发布于 2015-03-11 07:59:10
您可以通过以下查询获得登录到SQL Server数据库的用户的准确计数:
SELECT
DB_NAME(dbid) as DB
COUNT(dbid) as Numb
loginame as LoginNa
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame 您还可以通过以下方式获取已连接用户的完整详细信息:
sp_who2 'Active'发布于 2015-03-11 10:04:23
这是一种给出连接到给定数据库的is或MAC地址数量的方法。我会选择IP,因为在一个给定的高端工作站中可能会有多个NIC/MACs。
SELECT COUNT(DISTINCT c.client_net_address) as DistinctIPCount,
COUNT(DISTINCT p.net_address) as DistinctMACCount
FROM sys.dm_exec_connections c INNER JOIN sys.dm_exec_sessions s ON c.session_id = s.session_id
INNER JOIN sysprocesses p ON s.session_id = p.spid
WHERE s.is_user_process = 1
AND p.dbid = DB_ID('yourdbnamehere')https://stackoverflow.com/questions/28976123
复制相似问题