SSMS中的权限问题:"对象'extended_properties',数据库'mssqlsystem_resource',...错误229拒绝了SELECT权限"

Rob*_*son 21 t-sql sql-server security permissions ssms

这是最简单的repro案例.

  1. 创建一个全新的数据库.(我正在使用SQL 2005.)
  2. 在新数据库中创建登录,SQL用户和表(请参阅下面的示例代码).
  3. 启动SSMS并打开对象资源管理器,以新创建的用户身份登录.
  4. 尝试在对象资源管理器中打开"Tables"文件夹.

问题

失败,显示此错误消息.

消息文字:

标题:Microsoft SQL Server Management Studio
无法检索此请求的数据.(Microsoft.SqlServer.Management.Sdk.Sfc)
如需帮助,请单击:链接
附加信息:
执行Transact-SQL语句或批处理时发生异常.(Microsoft.SqlServer.ConnectionInfo)
对象'extended_properties',数据库mssqlsystemresource',schema'sys'拒绝SELECT权限.(Microsoft SQL Server,错误:229)
如需帮助,请单击:链接

该用户可以访问表和表中的记录.但是用户无法访问对象资源管理器中的表列表.

SELECT USER_NAME() AS CurrentUser, col1
FROM dbo.TestTable

CurrentUser col1
----------- ----
robg_test   1000
Run Code Online (Sandbox Code Playgroud)

我发现的唯一解决方法是为用户提供高于必要的权限(如db_datareader).

问题:

允许此用户在对象资源管理器中打开表列表所需的最低权限是多少?

我曾尝试授予用户dbo架构的各种权限,但这没有帮助.

另请注意,我使用SQL用户只是为了说明问题.最初的问题出在AD用户身上.

是serverfault中一个相对类似的问题.


SET NOCOUNT ON
USE master
GO
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'robg_test')
    DROP LOGIN [robg_test]
GO
CREATE LOGIN [robg_test]
WITH
    PASSWORD         = N'CLK63!!black',
    DEFAULT_DATABASE = [RGTest],
    DEFAULT_LANGUAGE = [us_english],
    CHECK_EXPIRATION = OFF,
    CHECK_POLICY     = ON
GO

IF EXISTS (SELECT * FROM sys.databases WHERE name = 'RGTest')
    DROP DATABASE [RGTest]
GO
CREATE DATABASE [RGTest]
GO
USE [RGTest]
GO
CREATE USER [robg_test] FOR LOGIN [robg_test] WITH DEFAULT_SCHEMA = [dbo]
GO
CREATE TABLE dbo.TestTable (col1 int)
GO
GRANT SELECT ON dbo.TestTable TO [robg_test]
GO
INSERT INTO dbo.TestTable VALUES (1000)
GO
Run Code Online (Sandbox Code Playgroud)

小智 75

请检查您是否未检查db_denydatareader数据库角色.通过删除该检查它对我有用.

  • 这令人难以置信我认为授予许可意味着检查所有项目! (5认同)

小智 9

我有类似的问题并解决了通过为该用户删除两个角色db_denydatareader和db_denydatawriter并添加其他角色.我用过sql管理工作室.