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 :
W przypadku schematów umożliwia dostęp do obiektów zawartych w określonym schemacie (przy założeniu, że spełnione są również własne wymagania dotyczące uprawnień obiektów). Zasadniczo umożliwia to beneficjentowi „wyszukiwanie” obiektów w schemacie. Bez tego uprawnienia nadal można zobaczyć nazwy obiektów, np. Poprzez odpytywanie tabel systemowych. Ponadto po odwołaniu tego uprawnienia istniejące zaplecze mogą zawierać instrukcje, które wcześniej wykonywały to wyszukiwanie, więc nie jest to całkowicie bezpieczny sposób zapobiegania dostępowi do obiektów.
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.