SQL Server: не может получить доступ к системным таблицам
У меня есть база данных 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 ответ
Проблема была задумана так же, как и в разрешении SELECT для объекта "sysobjects", базы данных "mssqlsystemresource", схемы "sys": у моего пользователя было несколько "запрещающих" ролей.
Решение состояло в том, чтобы удалить эту роль пользователя:
USE [ff20121025]
EXEC sp_droprolemember N'db_denydatawriter', N'factoryFX20_K_user'
EXEC sp_droprolemember N'db_denydatareader', N'factoryFX20_K_user'
Спасибо Джон!