Czy istnieje sposób na przyznanie użytkownikowi dostępu tylko do wszystkich niesystemowych widoków bazy danych?

9

W SQL Server mam użytkownika w określonej bazie danych i zostałem poproszony o udzielenie mu dostępu do wszystkich widoków niesystemowych bazy danych. Wierzę, że można to zrobić, edytując sekcje zabezpieczeń widoku typu i przyznając zaznaczenie dla każdego z nich, ale istnieje wiele, wiele widoków. Czy istnieje bardziej skuteczny sposób na osiągnięcie tego?

Christopher Garcia
źródło

Odpowiedzi:

8

Nie ma takiej składni jak

GRANT SELECT ON ALL::Views TO SomeUser 

Można GRANT SELECTzezwolić na poszczególne obiekty , schematy lub całą bazę danych, ale nie filtrować według typu obiektu, aby uwzględnić tylko widoki. W przypadku tego rodzaju zadania adhoc prawdopodobnie utworzę nową rolę o nazwie ViewReader, dodaj użytkownika do tej roli, a następnie uruchom SSMS

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

w celu wygenerowania skryptu w celu uruchomienia GRANTwymaganych uprawnień.

Martin Smith
źródło
Dziękuję za niezwykle wdzięczną odpowiedź. Skrypt jest trochę ponad moją głową, więc zanim spróbuję wdrożyć, przeczytam trochę. Dzięki jeszcze raz.
Christopher Garcia
1
@lush - skrypt udostępnia tylko niektóre polecenia do przeglądania, kopiowania, wklejania i uruchamiania. Możesz zrobić coś bardziej skomplikowanego, aby połączyć wynik, EXECale nie zawracałbym sobie głowy jednorazowym zadaniem.
Martin Smith
Rozumiem teraz, że jest to idealne rozwiązanie tego problemu, dziękuję!
Christopher Garcia
4

W moim przypadku podjąłem inne podejście. Oto co zrobiłem:

  1. Utwórz login i zamapuj go w bazie danych.
  2. Przejdź do bazy danych i stwórz na przykład schemat o nazwie Public_View. Właściciel tego schematu musi być tym samym właścicielem tabel, do których będą odwoływać się widoki.
  3. Przyznaj nowemu użytkownikowi dostęp do nowego schematu.
  4. Utwórz tyle widoków, ile chcesz w nowym schemacie, a nowy użytkownik będzie miał do nich dostęp.

Dobrą rzeczą jest to, że nowy użytkownik nie będzie miał dostępu do tabel, nawet nie będzie mógł ich zobaczyć.

Mam nadzieję, że to pomoże.

Francisco Goldenstein
źródło
4
+1 Dla mnie zaletą tego rozwiązania w porównaniu do mojego jest to, że nie trzeba jawnie przypisywać uprawnień, gdy tworzone są nowe widoki.
Martin Smith,