Чи є спосіб надати користувачеві доступ лише до всіх несистемних переглядів бази даних?


9

У SQL Server у мене є користувач у певній базі даних, і мене попросили надати їм доступ до всіх несистемних переглядів бази даних. Я вважаю, що це можна зробити, відредагувавши кілька типів подання типу та надавши виділення для кожного, але існує багато-багато переглядів. Чи є більш ефективний спосіб досягти цього?

Відповіді:


8

Не існує такого синтаксису, як

GRANT SELECT ON ALL::Views TO SomeUser 

Ви можете отримувати GRANT SELECTдозволи на окремі об’єкти , схеми або всю базу даних, але не відфільтровані за типом об'єкта, включаючи лише представлення. Для цього завдання adhoc я, мабуть, створив нову роль, яку називають ViewReader, додати користувача до цієї ролі, а потім у SSMS

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

для створення сценарію для запуску GRANTнеобхідних дозволів.


Дякую за надзвичайно витончену відповідь. Сценарій трохи над головою, тому я прочитаю читання, перш ніж намагатись реалізувати. Знову дякую.
Крістофер Гарсія

1
@lush - Сценарій просто дає кілька команд для перегляду, копіювання, вставки та запуску. Ви можете зробити щось більш детальне, щоб зв'язати результат, EXECале я не заважав би за одноразове завдання.
Мартін Сміт

Я зараз розумію, це ідеальне рішення цієї проблеми, дякую!
Крістофер Гарсія

4

Я застосував інший підхід у своїй справі. Ось що я зробив:

  1. Створіть логін та нанесіть його на базу даних.
  2. Перейдіть у базу даних, наприклад, створіть схему під назвою Public_View. Власник цієї схеми повинен бути тим самим власником таблиць, на які збираються перегляди.
  3. Надати новому користувачеві доступ до нової схеми.
  4. Створіть стільки переглядів, скільки вам потрібно в новій схемі, і новий користувач матиме доступ до них.

Хороша річ, що новий користувач не матиме доступу до таблиць, він навіть не зможе побачити таблиці.

Я сподіваюся, що це допомагає.


4
+1 Мені добре, що в цьому рішенні над моїм рішенням є те, що немає необхідності чітко призначати дозволи, коли створюються нові представлення даних.
Мартін Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.