SQL Server2022+SSMS19:用户可查询数据库但无法在对象资源管理器见实例
解决SQL Server 2022中xp_msver权限拒绝及对象资源管理器无法显示数据库的问题
问题分析
核心问题关联两个关键点:
- SSMS 19连接时会调用
sys.xp_msver获取服务器信息,目标登录缺少该存储过程的执行权限,因此触发权限拒绝报错; - 对象资源管理器无法显示数据库,是因为登录没有
VIEW ANY DATABASE服务器级权限——即便能手动选择数据库执行查询,也无法加载完整的数据库列表。
此前尝试直接授权sp.xp_msver失败,原因是该存储过程实际归属master数据库的sys架构,而非直接在mssqlsystemresource库中操作(mssqlsystemresource是隐藏的只读系统数据库,常规登录无法直接访问)。
解决方案
请使用具有系统管理员权限的账号(如sa)登录目标SQL Server 2022实例,执行以下步骤:
1. 授予xp_msver执行权限
切换到master数据库,给目标登录授权:
USE master; GRANT EXECUTE ON sys.xp_msver TO [你的登录名];
2. 授予查看数据库的服务器级权限
若无需最高权限,仅需让对象资源管理器显示所有数据库,执行:
GRANT VIEW ANY DATABASE TO [你的登录名];
若需要全面管理权限,可将登录添加到sysadmin服务器角色:
ALTER SERVER ROLE sysadmin ADD MEMBER [你的登录名];
3. 验证修复效果
- 断开当前SSMS连接,用目标登录重新连接,检查是否仍存在
xp_msver权限拒绝报错; - 查看对象资源管理器,确认数据库列表已正常显示。
额外说明
mssqlsystemresource库存储了SQL Server的系统对象定义,物理文件通常位于C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn路径下,常规登录无需直接访问该库,所有系统对象的权限操作都在master、msdb等可见系统库中完成。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

