VIEW SERVER STATE permission was denied on object 'server', database 'master'

本文描述了使用 SQLServer2012ManagementStudio 连接 SQLServer2014 时遇到的一个错误,并提供了相应的解决方案。该问题表现为无法查看数据库表的属性,通过升级或应用补丁可以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一同事反馈使用SQL Server 2012 Management Studio连接SQL Server 2014后,选择数据库中某个表,然后单击右键时,就会遇到下面错误:

 

 

这个错误初看以为是权限问题,后面验证、检查、查找资料过后,发现这个是一个bug来的,需要升级或应用SQL Server Management Studio工具的补丁来解决这个问题。下面链接有描述这个问题的相关资料,特此记录一下,方便遇到此类问题的人查找、检索。

 

http://dba.stackexchange.com/questions/118452/error-message-view-server-state-permission-was-denied-when-connecting-to-sql

 

https://connect.microsoft.com/SQLServer/feedback/details/791630/cannot-view-properties-of-database-when-using-db-owner-account

<think>嗯,用户遇到了SQL Server中SELECT权限被拒绝的问题,具体是在Operator、HRMDB、dbo架构下的对象上。我需要帮他找到解决方法。首先,得确认问题出现的具体场景。用户提到对象是Operator,可能是指某个表或者存储过程?还有HRMDB数据库,dbo架构下的权限问题。 首先,我应该想到权限不足的情况。可能的解决步骤包括检查当前用户的权限,确认是否有被拒绝的SELECT权限。然后,可能需要授予相应的权限。通常,使用GRANT语句来授权,比如GRANT SELECT ON OBJECT::HRMDB.dbo.Operator TO [用户名]。但需要确认用户是否有权限执行这个操作,可能需要管理员权限。 另外,用户提供的引用中有提到sp_executesql和添加操作员的脚本,这可能涉及到执行动态SQL或者操作员权限的设置,但当前的问题是关于SELECT权限被拒绝,所以重点可能不在自动化脚本上。不过,可能需要检查是否有相关的安全策略或角色分配问题。 还要考虑用户是否属于正确的数据库角色,比如db_datareader角色拥有所有表的SELECT权限。如果用户需要更细粒度的控制,可能需要单独授权。此外,架构权限也可能影响访问,比如dbo架构的默认权限设置。 另外,是否有可能是对象名称写错了?比如Operator对象是否存在,是否在正确的架构下。用户可能需要检查对象的存在性,或者是否有拼写错误。同时,如果对象是视图或存储过程,可能需要不同的权限设置。 总结一下,解决步骤可能包括: 1. 确认用户是否有权限访问该对象。 2. 使用GRANT语句授予SELECT权限。 3. 将用户添加到具有读取权限的数据库角色。 4. 检查架构权限。 5. 验证对象是否存在。 然后,生成相关问题时,可以涉及权限管理、角色分配、错误排查方法等。需要确保问题覆盖用户可能进一步需要了解的内容,比如如何检查权限,其他常见权限问题,角色管理等。</think>### 解决方案:SQL Server SELECT权限被拒绝问题 #### 1. 确认权限主体 首先需验证当前用户是否具有对目标对象(`HRMDB.dbo.Operator`)的`SELECT`权限。可通过以下脚本检查: ```sql USE HRMDB GO EXECUTE AS USER = '当前用户名' -- 替换为实际用户名 SELECT HAS_PERMS_BY_NAME('dbo.Operator', 'OBJECT', 'SELECT'); REVERT ``` 若返回值为`0`,表示无权限[^1]。 #### 2. 授予显式权限 通过`GRANT`语句直接授权: ```sql USE HRMDB GO GRANT SELECT ON OBJECT::dbo.Operator TO [用户名] -- 替换为实际用户名 ``` 需确保执行者具有`GRANT`权限(如`securityadmin`角色成员)[^2]。 #### 3. 分配数据库角色 将用户加入`db_datareader`角色可自动获得所有表`SELECT`权限: ```sql USE HRMDB GO EXEC sp_addrolemember 'db_datareader', '用户名' ``` #### 4. 架构级权限控制 若需要更细粒度控制,可授予架构级权限: ```sql GRANT SELECT ON SCHEMA::dbo TO [用户名] ``` #### 5. 验证对象存在性 确认对象路径正确性: ```sql SELECT * FROM HRMDB.sys.objects WHERE name = 'Operator' AND schema_id = SCHEMA_ID('dbo') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值