У нас есть утилита, которая делает магию SQL, отражая определение для некоторых представлений и хранимых процедур.Чтобы это работало, код должен иметь доступ к различным полям в таблицах INFORMATION_SCHEMA.ROUTINES, INFORMATION_SCHEMA.VIEWS и т. Д.
Итак, мы написали курсор, который применяет
GRANT VIEW DEFINITION on ' + @Name + ' TO tenant'
, где арендаторроль, под которой исполняется код, а @Name является переменной курсора для имени процесса.Это работает.
Но тогда кто-то неизбежно отбросит / заново создаст процесс, тем самым удалив доступ к определению этого процесса, что приведет к сбою магической утилиты.
Так что лучше всего сказать«Весь код, выполняемый под ролью« арендатора », имеет полный доступ на чтение ко всем таблицам INFORMATION_SCHEMA?»
Редактировать:
Я попытался GRANT VIEW ANY DEFINITION TO tenant
, и он вызываетследующая ошибка:
Невозможно найти логин 'арендатор', поскольку он не существует или у вас нет разрешения.
Это потому, что арендатор является ролью, а непользователь, или я просто действительно не имею разрешения?Я вошел как sa.