Przyznaj dostęp do wszystkich tabel bazy danych

13

Niedawno chciałem podzielić regularne prawa dostępu z jednego użytkownika na serwerze i zdałem sobie sprawę, że proste CREATE USERi GRANT ALL ON DATABASEpolecenia nie pozwolił mu uruchomić prosty SELECTna danych.

Chciałbym przyznać prawa do wszystkich tabel z danej bazy danych określonemu użytkownikowi, ale nie jestem pewien, czy to najlepszy pomysł, aby przyznać mu dostęp do całego schematu, publicponieważ nie wiem, czy pozwoliłoby to na jakieś przywileje eskalacja. Czy jest jakiś inny sposób?

d33tah
źródło
Dlaczego nie możesz tak po prostu GRANT SELECT ON TableName TO [Domain\User]? Zwykle przypisuję użytkowników do db_datareaderroli, jeśli wszystko, czego potrzebują, to dostęp do odczytu do wszystkich tabel, ale nie jestem pewien, jak bardzo chcesz być szczegółowy.
Kris Gruttemeyer
Chciałbym przyznać wszystkie CRUD wszystkim tabelom w bazie danych. Przydatne może się również okazać DROPping i CREATEing w tej bazie danych.
d33tah

Odpowiedzi:

19

Przywilej DATABASEtylko przyznaje ogólne prawa do połączenia z bazą danych i nie więcej. Użytkownik posiadający tylko to uprawnienie może zobaczyć tylko to, co może zobaczyć ogół społeczeństwa.

Aby przyznać dostęp do odczytu do wszystkich tabel , potrzebujesz również uprawnień do wszystkich schematów i tabel:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

Możesz także ustawić domyślne uprawnienia dla przyszłych schematów i tabel. Uruchom dla każdej roli, która tworzy obiekty w db

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

Ale naprawdę musisz najpierw zrozumieć całą koncepcję .
I prawie zawsze lepiej jest łączyć uprawnienia w role grupy, a następnie nadawać / odwoływać role grupy do / z ról użytkowników. Związane z:

Erwin Brandstetter
źródło
Czy myusrliterówka? Nie powinno tak być myuser?
attomos
1
@attomos: W tym przykładzie powinien to być inny użytkownik. Wyjaśniłem.
Erwin Brandstetter