用户在 SSMS 对象资源管理器中看不到 SQL Server 实例,但可以从可用数据库下拉列表中进行选择,并可以针对数据库进行查询

User not see SQL Server instance in SSMS Object Explorer, but can select from available database dropdown and can query against the database

提问人:Eric 提问时间:11/8/2023 最后编辑:Dale KEric 更新时间:11/8/2023 访问量:54

问:

我遇到了一个用户的问题,该用户正在尝试使用 SSMS 处理 SQL Server 实例。当他们尝试连接时,他们会收到以下错误,但随后他们能够从可用数据库下拉列表中选择数据库,并且可以对数据库运行 select 语句。遗憾的是,他们看不到对象资源管理器中列出的数据库。这是在使用 SSMS 19 的 SQL Server 2022 上。用户能够连接到并查看其他服务器,但不能查看此特定实例。

对象“xp_msver”、数据库“mssqlsystemresource”、架构“sys”的 EXECUTE 权限被拒绝。

我尝试删除用户的登录名,然后以完全权限重新添加它。我也尝试将sp.xp_msver上的执行权限授予 [user],但我收到了错误消息:

找不到对象“xp_msver”,因为它不存在或您没有权限。

sql-server ssms sql-server-2022

评论

2赞 Thom A 11/8/2023
这听起来像是您的实例上有一个登录触发器;是吗?或者,也许您搞砸了系统对象的权限?(这通常是一个非常糟糕的主意,除非你真的了解你在做什么。
0赞 Eric 11/8/2023
我不知道实例上有任何登录触发器,也没有触及系统对象的权限(除了尝试在sp.xp_msver上授予执行权)。该操作失败,因此未更改任何系统对象权限。

答:

1赞 David Browne - Microsoft 11/8/2023 #1

验证 master 中的 public 是否对 proc 具有执行权限:

select p.name, perm.*
from sys.database_permissions perm
join sys.database_principals p
  on p.principal_id = perm.grantee_principal_id
where perm.major_id = object_id('sys.xp_msver')

应该输出

name                  class class_desc          major_id    minor_id    grantee_principal_id grantor_principal_id type permission_name 
--------------------- ----- ------------------- ----------- ----------- -------------------- -------------------- ---- ----------------
public                1     OBJECT_OR_COLUMN    -524454186  0           0                    1                    EX   EXECUTE  

   


   

评论

0赞 Eric 11/8/2023
就是这样。感谢您的帮助!