SQL Server:无法访问系统表

时间:2012-10-26 08:35:00

标签: sql-server system-tables

我有一个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]

1 个答案:

答案 0 :(得分: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'

谢谢Jon!