SQL Server 2019三类权限是否可查询所有sys、DM视图及函数?
SQL Server 2019权限问题答复
1. 现有权限是否允许SELECT访问所有sys表、动态管理视图/函数
首先直接给结论:不能覆盖全部对象的访问需求。
你提到的微软官方权限规则引用如下:
To query a dynamic management view or function requires SELECT permission on object and VIEW SERVER STATE or VIEW DATABASE STATE permission.
基于该规则和SQL Server 2019的权限逻辑:
- 大部分常规sys架构目录视图、常用动态管理视图/函数(DMV/DMF)你是可以访问的:
VIEW SERVER STATE权限已经覆盖了服务器级、所有数据库级DM对象的STATE权限要求,大部分常规DM对象和sys目录视图默认已经给public角色授予了SELECT权限,VIEW ANY DEFINITION也会辅助保障你能访问大部分公开的元数据对象 - 少数涉及敏感信息的sys视图、特殊DM对象你无法访问,需要额外授权
2. VIEW ANY DATABASE权限是否等同于VIEW DATABASE STATE权限
二者完全不等同,作用完全独立:
VIEW ANY DATABASE是服务器级权限,作用仅为让你可以在实例中看到所有数据库的存在,无权限的用户仅能看到master、tempdb和自己有权限的数据库,该权限和数据库内部的状态查询能力没有任何关联VIEW DATABASE STATE是数据库级权限,需要单独对每个数据库授予,作用是允许查询对应数据库内的数据库级DMV和状态类元数据。你当前可以查询所有数据库的DMV,是因为VIEW SERVER STATE是更高优先级的服务器级权限,默认覆盖了所有数据库的VIEW DATABASE STATE权限要求,和VIEW ANY DATABASE无关
3. 是否存在需要单独显式授予SELECT才能访问的DM对象
存在,SQL Server 2019中有多类DM对象默认未给public授予SELECT权限,哪怕持有VIEW SERVER STATE也需要单独授权:
- 敏感安全类DM对象:例如
sys.dm_exec_query_plan_stats、sys.dm_server_memory_dumps、sys.dm_os_windows_info等涉及明文查询、内存转储、系统底层信息的对象 - 审计相关DM对象:例如
sys.dm_audit_actions、sys.dm_server_audit_status等涉及审计配置、审计日志的对象 - 高可用、复制相关特殊DM对象:例如涉及Always On内部机密配置的非公开DMV、
sys.dm_repl_articles等复制相关元数据对象
你当前测试能访问的都是常用公开DM对象,默认public已经有SELECT权限,所以无需单独授权即可访问。
内容的提问来源于stack exchange,提问作者EMEM
相关产品推荐
相关产品推荐

