在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表

Posted

技术标签:

【中文标题】在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表【英文标题】:Find most frequently accessed tables in SQL Server 2014 without VIEW SERVER STATE permission 【发布时间】:2021-12-16 09:26:14 【问题描述】:

我正在尝试使用此查询来获取数据库中访问频率最高的表:

SELECT t.NAME AS tname,
    SUM(ius.user_seeks + ius.user_scans + ius.user_lookups) AS accesses
FROM db_name.sys.dm_db_index_usage_stats ius
INNER JOIN db_name.sys.tables t ON t.OBJECT_ID = ius.object_id
GROUP BY database_id, t.name
ORDER BY accesses DESC

但它失败并出现错误

Msg 300, Level 14, State 1, Line 1
VIEW SERVER STATE permission was denied on object 'server', database 'master'.

可以理解,我们的后端托管公司不想将 VIEW SERVER STATE 权限授予任何随机实习生。是否有无需此权限即可获得相同或相似结果的查询(或 SQL Server 中的工具)?

【问题讨论】:

【参考方案1】:

你也可以这样用:

SELECT t.name, range_scan_count+singleton_lookup_count AS accesses, * 
FROM sys.dm_db_index_operational_stats(db_id(),NULL,NULL,NULL) os
INNER JOIN sys.tables t ON t.object_id = os.object_id
ORDER BY accesses DESC

这应该与VIEW DATABASE STATE 权限一起使用(即使您没有VIEW SERVER STATE 权限)。

但是,此查询返回的内容与您的查询不同。在此处查看差异:http://web.archive.org/web/20180410202012/http://sqlblog.com:80/blogs/paul_white/archive/2011/02/17/Seeking-Without-Indexes.aspx

【讨论】:

以上是关于在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Backbone View 中实现权限

为啥添加了 READ_PHONE_STATE 权限?

为啥添加了 READ_PHONE_STATE 权限?

SQL Server 用户失去查看权限

错误记录手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )

错误记录手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )