Я ищу лучший способ отключить доступ к sys.tables
/ Information Schema
для пользователя / группы в SQL Server.
Я нашел эту тему с 2008 года
Он показывает способ запрета доступа [sys].[something]
следующим образом:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Но нет способа, как отключить доступ на Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Кажется, это не работает.
Как я могу отключить доступ к information_schema?
И есть ли более простой способ отключить доступ ко всем sys
/ information_schema
?
Обновление: На самом деле я не могу выполнить оба следующих утверждения:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Я попытался запустить их на конкретной БД, где существует пользователь, и я также попытался на «мастер».
Я все еще могу бежать:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> по-прежнему возвращает результаты
SELECT * from
sys.TABLES
-> больше никаких результатов
Включение SCHEMA::
в запрос позволило создать защищаемые
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Но теперь я все еще могу выбрать всю информацию из БД.
Я взглянул на вкладку «Securables» в окне свойств пользователя в Management Studio 2008, она выглядит так:
Запись, которая блокирует выбор sys.tables
Схема: sys, Имя: таблицы, Тип: Вид
Разрешения для sys.tables: Разрешение: Выбрать, Предоставитель: dbo, Запрещено
Запись, не блокирующая выбор
Схема :, Имя: INFORMATION_SCHEMA, Тип: Схема
Разрешения для INFORMATION_SCHEMA: Разрешение: Выбрать, Предоставитель: dbo, Запретить НЕ проверено (Я пытался проверить, но без шансов ..)
Разрешение: Выберите, Предоставитель: INFORMATION_SCHEMA, Отклонен проверен
Я пытался установить разрешения через графический интерфейс, но затем я получаю ту же ошибку, что установка разрешений будет возможна только на главной базе данных. Но у меня нет имени пользователя / логина, добавленного к безопасности главных БД.
Решение:
Единственный способ , которым я мог бы сделать deny
работу для information_schema
было добавить пользователя в мастер-БД и запустить deny select
на мастер:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
И как в этом коде, он может быть выполнен только для отдельных таблиц.