Znalazłeś skrót do ustawiania uprawnień dla wszystkich istniejących tabel w podanym schemacie. Instrukcja wyjaśnia :
(ale należy pamiętać, że ALL TABLES
obejmuje to widoki i tabele obce ).
Odważne podkreślenie moje. serial
kolumny są zaimplementowane z nextval()
sekwencją jako domyślną kolumną i cytując instrukcję :
W przypadku sekwencji to uprawnienie umożliwia korzystanie z funkcji currval
i nextval
.
Więc jeśli są serial
kolumny, będziesz chciał również przyznać USAGE
(lub ALL PRIVILEGES
) na sekwencje
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Uwaga: kolumny tożsamości w Postgres 10 lub nowszym używają niejawnych sekwencji, które nie wymagają dodatkowych uprawnień. (Rozważ uaktualnienie serial
kolumn).
A co z nowymi obiektami?
Będziesz także zainteresowany DEFAULT PRIVILEGES
użytkownikami lub schematami :
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 ...;
Powoduje to automatyczne nadawanie uprawnień obiektom utworzonym w przyszłości, ale nie obiektom już istniejącym.
Domyślne uprawnienia są stosowane tylko do obiektów utworzonych przez docelowego użytkownika ( FOR ROLE my_creating_role
). Jeśli ta klauzula zostanie pominięta, domyślnie jest wykonywany przez bieżącego użytkownika ALTER DEFAULT PRIVILEGES
. Mówiąc wprost:
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świetlają domyślne uprawnienia w panelu SQL, nawet jeśli nie mają one zastosowania do bieżącej roli. Pamiętaj o FOR ROLE
ręcznym dostosowaniu klauzuli podczas kopiowania skryptu SQL.
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
skąd wie, jaka baza danych?SCHEMA foo
może istnieć w innej bazie danych?Moja odpowiedź jest podobna do tej na ServerFault.com .
Być konserwatywnym
Jeśli chcesz być bardziej konserwatywny niż przyznawanie „wszystkich przywilejów”, możesz spróbować czegoś podobnego.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
Użycie
public
tam odnosi się do nazwy domyślnego schematu tworzonego dla każdej nowej bazy danych / katalogu. Zastąp własną nazwą, jeśli utworzyłeś schemat.Dostęp do schematu
Aby w ogóle uzyskać dostęp do schematu, dla dowolnej akcji, użytkownikowi należy przyznać prawa „użytkowania”. Zanim użytkownik będzie mógł wybierać, wstawiać, aktualizować lub usuwać, musi najpierw przyznać mu „użycie” do schematu.
Nie zauważysz tego wymagania podczas pierwszego korzystania z Postgres. Domyślnie każda baza danych ma pierwszy schemat o nazwie
public
. Każdemu użytkownikowi domyślnie przyznano automatycznie prawa „użytkowania” do tego konkretnego schematu. Podczas dodawania dodatkowego schematu musisz jawnie przyznać prawa użytkowania.GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Fragment z dokumentu Postgres :
Aby uzyskać więcej informacji, zobacz Pytanie, Co dokładnie robi GRANT USAGE ON SCHEMA? . Zwróć szczególną uwagę na odpowiedź eksperta Postgres, Craiga Ringera .
Istniejące obiekty a przyszłość
Te polecenia mają wpływ tylko na istniejące obiekty. Tabele i takie, które utworzysz w przyszłości, otrzymają domyślne uprawnienia, dopóki nie wykonasz ponownie tych wierszy powyżej. Zobacz drugą odpowiedź Erwina Brandstettera, aby zmienić ustawienia domyślne, wpływając w ten sposób na przyszłe obiekty.
źródło