PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przyznaj wszystko w określonym schemacie w bazie danych do roli grupowej w PostgreSQL

Znalazłeś skrót do ustawiania uprawnień dla wszystkich istniejących tabele w podanym schemacie. Instrukcja wyjaśnia:

(ale zauważ, że ALL TABLES uważa się, że obejmuje widoki i stoły zagraniczne ).

Moje odważne podkreślenie. serial kolumny są zaimplementowane za pomocą nextval() na sekwencji jako domyślnej kolumny i cytując instrukcję:

W przypadku sekwencji to uprawnienie pozwala na użycie currval i nextval funkcje.

Więc jeśli istnieje serial kolumny, będziesz również chciał przyznać USAGE (lub ALL PRIVILEGES ) w sekwencjach

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

Uwaga:kolumny tożsamości w Postgres 10 lub nowszych używają niejawnych sekwencji, które nie wymagają dodatkowych uprawnień. (Rozważ aktualizację serial kolumny.)

Co z nowym obiekty?

Będziesz także zainteresowany DEFAULT PRIVILEGES dla użytkowników lub schematów:

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

To automatycznie ustawia uprawnienia dla obiektów tworzonych w przyszłości - ale nie dla obiektów już istniejących.

Domyślne uprawnienia są tylko zastosowane do obiektów utworzonych przez docelowego użytkownika (FOR ROLE my_creating_role ). Jeśli ta klauzula zostanie pominięta, domyślnie bieżący użytkownik wykonuje ALTER DEFAULT PRIVILEGES . Mówiąc wyraźnie:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

Zauważ również, że wszystkie wersje pgAdmin III mają subtelny błąd i wyświetlanie domyślne uprawnienia w okienku SQL, nawet jeśli nie dotyczą bieżącej roli. Pamiętaj, aby dostosować FOR ROLE klauzulę ręcznie podczas kopiowania skryptu SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak osiągnąć wysoką dostępność PostgreSQL z pgBouncer?

  2. Dopasuj frazę kończącą się prefiksem za pomocą wyszukiwania pełnotekstowego

  3. Zapytanie SQL, aby uzyskać najnowszy wiersz dla każdego wystąpienia danego klucza

  4. UPPER() – Konwertuj na wielkie litery w PostgreSQL

  5. Postgresql SQL GROUP BY interwał czasowy z dowolną dokładnością (do milisekund)