SQL Server 2008 дает разрешение к information_schema.columns

У меня есть ряд хранимых процедур, которые выбирают данные из дб. У меня есть роль (cctc_reader), который имеет, выполняют разрешения, данные на процедурах. Один из вызовов процедуры другая названная хранимая процедура recControl_system_option который в свою очередь запрашивает Information_schema.columns.

Проблема состоит в том что в этом proc запрос

select column_name from information_schema.columns where table_name = 'recControl_manager'

не возвращает записей. cctc_reader имеет, дают разрешения на:

  • каждый выбор proc
  • recControl_system_option

таким образом в теории это должно работать. У меня нет проблем, когда выполнено под dbo.

Если я предоставляю db_datareader cctc_reader, запрос прекрасен, но я не хочу давать разрешения читателя ко всем таблицам (следовательно, почему я использовал сохраненный procs). Я попытался дать Избранные разрешения на Information_schema в Основном дб, как предложено в некоторых статьях, но все еще не могу заставить это работать.

Какие-либо предложения?

8
задан APC 5 August 2010 в 15:34
поделиться

2 ответа

Доступность метаданных объектов зависит от разрешения VIEW DEFINITION :

GRANT VIEW DEFINITION ON ... TO cctc_reader;

Разрешение VIEW DEFINITION позволяет пользователь видит метаданные защищаемого на который выдается разрешение. Однако разрешение ПРОСМОТРЕТЬ ОПРЕДЕЛЕНИЕ не предоставляет доступ к защищаемый сам. Например, пользователь дается только ПРОСМОТР ОПРЕДЕЛЕНИЯ разрешение на таблицу может видеть метаданные относится к таблице в Просмотр каталога sys.objects. Тем не мение, без дополнительных разрешений, таких как SELECT или CONTROL, пользователь не может читать данные из таблицы.

Право на предоставление разрешения зависит от вашего сценария. Это может быть dbo или какая-то другая схема, это может быть сама база данных, это могут быть отдельные таблицы. Если бы я был на вашем месте, я бы подписал код процедуры recControl_system_option и предоставил бы ПРОСМОТР ЛЮБОГО ОПРЕДЕЛЕНИЯ для подписи на уровне сервера, гораздо лучший и безопасный способ использования ролей и предоставления разрешений для ролей. См. Подписание активированной процедуры для примера того, как подписать процедуру и предоставить разрешение на уровне сервера для подписи.

6
ответ дан 5 December 2019 в 20:12
поделиться

Как упоминал Ремус, видимость метаданных влияет на данные, возвращаемые при запросе системных таблиц и представлений. Если у вас нет прав на защищаемый объект (объект, логин и т. Д.), Он не будет виден.

В зависимости от вашей ситуации вы можете разрешить внутреннему вызову иметь EXECUTE AS OWNER или обернуть Information_schema.columns в udf, который выглядит как EXECUTE AS OWNER

Мы используем этот метод, когда мы запрашиваем метаданные.

2
ответ дан 5 December 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: