Я пытаюсь предоставить все привилегии для всех таблиц данной базы данных новому пользователю postgres (а не владельцу). Кажется, что GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
это не так. После успешного выполнения указанной команды (как пользователь postgres), я получаю следующее как new_user:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Два вопроса:
1) Что делает вышеприведенная команда, если не предоставляет все разрешения всем таблицам в my_db?
2) Как правильно предоставить пользователю все разрешения на все таблицы? (включая все таблицы, созданные в будущем)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
или вы не можете вставить какие-либо записи.Можно настроить несколько учетных записей для работы в качестве владельца базы данных:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Теперь, если пользователь user1 или user2 войдет, у них есть все разрешения для «mydb» без каких-либо дополнительных разрешений.
Однако я бы тщательно обдумал это решение. Соблазнительно, чтобы ваше веб-приложение использовало один из этих имен входа, чтобы избежать боли при создании дополнительных грантов при каждом обновлении схемы, но таким образом вы удаляете очень полезную форму защиты. Используйте вышеупомянутое решение, если вам действительно нужно несколько «администраторов», но придерживайтесь приведенного выше шаблона «предоставить все привилегии для всех таблиц в схеме ...» для входа в приложение «обычного использования».
источник