Próbuję przyznać wszystkie uprawnienia do wszystkich tabel w danej bazie danych nowemu użytkownikowi postgres (nie właścicielowi). Wygląda na to, że GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
tego nie robi. Po pomyślnym uruchomieniu polecenia (jako użytkownik postgres) otrzymuję następujące polecenie jako nowy użytkownik:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Dwa pytania:
1) Co robi powyższe polecenie, jeśli nie udziela wszystkich uprawnień do wszystkich tabel na my_db?
2) Jaki jest właściwy sposób nadania użytkownikowi wszystkich uprawnień do wszystkich tabel? (w tym na wszystkich tabelach utworzonych w przyszłości)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
lub nie możesz wstawić żadnych rekordów.Możliwe jest skonfigurowanie wielu loginów do działania jako właściciel bazy danych:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Teraz, jeśli użytkownik 1 lub użytkownik 2 zaloguje się, będą mieli wszystkie uprawnienia do „mydb” bez żadnych dodatkowych przydziałów.
Zastanowiłbym się jednak nad tym rozwiązaniem. Kuszące jest, aby Twoja aplikacja internetowa korzystała z jednego z tych loginów, aby uniknąć bólu związanego z tworzeniem dodatkowych dotacji przy każdej aktualizacji schematu, ale w ten sposób usuwasz bardzo przydatną formę ochrony. Użyj powyższego rozwiązania, jeśli naprawdę chcesz wielu „administratorów”, ale trzymaj się powyższego wzorca „udziel wszystkich uprawnień na wszystkich tabelach w schemacie ...”, aby zalogować się do aplikacji „normalnego użytkowania”.
źródło