Chciałbym dać użytkownikowi wszystkie uprawnienia do bazy danych, nie czyniąc go administratorem. Powodem, dla którego chcę to zrobić, jest to, że w tej chwili DEV i PROD są różnymi bazami danych w tym samym klastrze, więc nie chcę, aby użytkownik mógł zmieniać obiekty produkcyjne, ale musi mieć możliwość zmiany obiektów w DEV.
Próbowałem:
grant ALL on database MY_DB to group MY_GROUP;
ale wydaje się, że nie daje to żadnego pozwolenia.
Potem spróbowałem:
grant all privileges on schema MY_SCHEMA to group MY_GROUP;
i wydaje mi się, że daje mi pozwolenie na tworzenie obiektów, ale nie na zapytanie \ usuwanie obiektów na tym schemacie, które należą do innych użytkowników
Mógłbym kontynuować, udzielając użytkownikowi USAGE pozwolenia na MY_SCHEMA, ale wtedy narzekałoby na brak uprawnień na stole ...
Wydaje mi się, że moje pytanie brzmi: czy jest jakiś prosty sposób na udzielenie wszystkich uprawnień użytkownikowi bazy danych?
Pracuję nad PostgreSQL 8.1.23.
źródło
ON DATABASE
wydaje się potężne, ale niewiele zdziała. To tylko początek. Nie przyznaje żadnych uprawnień do zawartych obiektów.W PostgreSQL 9.0+ możesz wykonać następujące czynności:
Jeśli chcesz włączyć to również dla nowo tworzonych relacji, ustaw domyślne uprawnienia:
Jednak widząc, że używasz wersji 8.1, musisz sam go kodować:
Spowoduje to ustawienie uprawnień do wszystkich relacji: tabel, widoków, indeksów, sekwencji itp. Jeśli chcesz to ograniczyć, filtruj
pg_class.relkind
. Szczegółowe informacje można znaleźć w dokumentacji pg_class .Powinieneś uruchomić tę funkcję jako superużytkownik i tak regularnie, jak wymaga tego twoja aplikacja. Opcją byłoby spakowanie tego w zadaniu cron, które jest wykonywane codziennie lub co godzinę.
źródło
Wykonałem następujące czynności, aby dodać rolę „eSumit” w bazie danych PostgreSQL 9.4.15 i wyrazić zgodę na tę rolę:
Sprawdzono także wpisy pg_table poprzez:
wybierz * z pg_roles;
Migawka zapytań do bazy danych:
źródło