【问题标题】:SQL Server: cannot access system tablesSQL Server:无法访问系统表
【发布时间】:2012-10-16 12:23:37
【问题描述】:

我有一个 MSSQL 数据库和一个“普通”用户访问它。当我尝试使用 sys.objects 之类的表时,出现权限错误:

select name from sys.objects
Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'objects', database 'mssqlsystemresource', schema 'sys'.

为什么?文档说

在 SQL Server 2005 及更高版本中,元数据的可见性 在目录视图中仅限于用户拥有或 用户已被授予某些权限。

所以我认为我应该被允许使用 sys.objects,即使它只会列出对我来说可见的对象...

我的用户是用

创建的
CREATE LOGIN [factoryFX20_K_user] WITH PASSWORD=N'...', DEFAULT_DATABASE=[ff20121025], DEFAULT_LANGUAGE=[English], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
EXEC sys.sp_addsrvrolemember @loginame = N'factoryFX20_K_user', @rolename = N'serveradmin'

USE [ff20121025]
CREATE USER [factoryFX20_K_user] FOR LOGIN [factoryFX20_K_user] WITH DEFAULT_SCHEMA=[factoryFX20_K_user]

【问题讨论】:

标签: sql-server system-tables


【解决方案1】:

问题与The SELECT permission was denied on the object 'sysobjects', database 'mssqlsystemresource', schema 'sys' 中的问题相同:我的用户有一些“拒绝”角色。

解决方案是删除用户的这个角色:

USE [ff20121025]
EXEC sp_droprolemember N'db_denydatawriter', N'factoryFX20_K_user'
EXEC sp_droprolemember N'db_denydatareader', N'factoryFX20_K_user'

谢谢乔恩!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2011-07-27
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2016-10-10
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多