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.