我们按工作站数量许可我们的软件。
我有一个查询多年来一直用于获取登录到我的 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 有关 - 不确定。
我需要的是一种非常可靠的方法来获取登录到我的数据库的工作站的数量。
如果有人能告诉我为什么我会突然为每个工作站获得多个网络地址,以及如何防止这种情况发生,这将是一种可能的解决方案。
否则,如果有人可以给我一个坚如磐石的方法来获得除上述以外的工作站数量,那就太好了。顺便说一句,我们最大的客户是 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
提前感谢您的帮助。