我使用非管理员的给定用户连接到 SQL Server。我想获取我所有打开的连接的列表。我发现了无穷无尽的命令,但都属于这些类别之一:
我不允许运行该命令:
Msg 297, Level 16, State 1, Line 1
用户无权执行此操作。我只看到我当前的会话!
是否可以列出当前用户的所有会话?
我使用非管理员的给定用户连接到 SQL Server。我想获取我所有打开的连接的列表。我发现了无穷无尽的命令,但都属于这些类别之一:
我不允许运行该命令:
Msg 297, Level 16, State 1, Line 1
用户无权执行此操作。
我只看到我当前的会话!
是否可以列出当前用户的所有会话?
您需要拥有
VIEW SERVER STATE
用户帐户的权限。这将需要由具有足够权限的人授予,并且允许您在运行类似
sp_who
或的命令时查看所有会话sp_whoisactive
。如果您担心此权限的安全隐患,这篇文章可能会对“查看服务器状态”的安全和性能影响有所帮助
一旦您拥有查看服务器状态的权限,您就可以通过将其作为参数传入来限制您的用户
SQL Server 的设计(与大多数数据库引擎一起)考虑到了安全性,您将查看的主要区域是
所有用户都可以访问所有这些命令(都是视图),但视图仅限于您当前的 spid,除非您具有可以按数据库级别在数据库上授予的权限“查看服务器状态”。
用户被授予查看他们自己的连接的基本权限,因为它是关于您自己的信息(请注意,这将始终报告您正在运行选择命令,因为这就是您当时正在做的事情)
如果您拥有“查看服务器状态”权限,则可以运行如下查询:
(或创建一个程序来运行它)注意:这不适用于任何系统管理员帐户,因为他们的 current_user 始终是 'dbo'
编辑:警告,查看服务器状态将授予查看任何已连接的人的权限,而不仅仅是具有当前用户名的人,因此您可能需要检查您希望为此设置哪些潜在的额外安全性(如果需要)