Правда ли, что в PostgreSQL создать резервного пользователя только для чтения невозможно?
Мне сообщили на IRC-канале, что у вас просто не может быть резервного пользователя только без прав владения. Я нахожу это очень странным, поэтому хочу убедиться, что я ничего не пропустил.
Ниже то, что я пытался, но это не дает мне результатов, которые я ищу. Когда я делаю pg_dump
на данном столе, я получаю Permission denied for relation...
:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup;
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;
Любая помощь будет принята с благодарностью!
backup
postgresql-9.1
permissions
круговращение
источник
источник
Ответы:
Нет, это легко (теперь так или иначе).
Предоставьте разрешение на подключение новому пользователю
Предоставьте разрешения для всех текущих объектов базы данных. Это зависит от схемы, и вам придется запускать одну копию для каждой схемы, которую вы хотите, чтобы ваш пользователь использовал,
Из документов
ALL TABLES
включает в себя все , что вы хотите.Затем
ALTER DEFAULT PRIVLEGES
предоставить будущиеSELECT
привилегии для еще не созданных объектов.источник
ALTER DEFAULT PRIVILEGES ... myReadonlyUser
, 2 дополнительные линии добавляются на свалку:ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;
. Похоже, это будет означать, что root не сможет ничего делать на новых таблицах. Это правда?bigint
для чтения, пользователю, вероятно, также понадобитсяGRANT SELECT ON ALL SEQUENCES
Простой и приятный способ - создать суперпользователя с правами только для чтения.
psql
как postgres или другой суперпользователь.Создайте новую роль суперпользователя и установите для нее только чтение:
<PASS>
на выбранный вами пароль.backadm
выбранное имя пользователя. (Я положилbackadm
дляBackup Administrator
).Теперь вы можете использовать эту роль для резервного копирования.
источник
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
илиALTER USER backadm set default_transaction_read_only = off;
имеет неограниченный доступ к базе данных.Обратите внимание, что блог, на который ссылается ответ @Gyre , не будет работать для создания пользователя «только для чтения» (т. Е. Для создания роли только для чтения для веб-приложения для подключения к базе данных) и может привести к серьезному уязвимость безопасности, поскольку ее легко обойти, как объясняется в этом ответе из списка postgresql . Для справки, клиент переопределяет настройки сеанса:
Обратитесь к презентации «Управление правами в postgresql», связанной с вики postgres, для более детального метода, подобного тому, который был опубликован в вопросе.
источник
После тестирования с помощью решения Эвана Кэролла я столкнулся с этой ошибкой:
пропало еще одно разрешение:
Добавление этого разрешения позволило мне сделать резервную копию с моим пользователем только для чтения.
источник
Я провел некоторое надлежащее исследование, и, похоже, для этого есть решение. Я сталкивался с этим сообщением в блоге, которое прекрасно объясняет, что должно быть сделано. Я надеюсь, что это поможет людям, которые ищут тот же ответ, что и я. Очевидно, что восстановление резервных копий, выполненных таким образом, - это другой вопрос.
источник
ALTER USER set default_transaction_read_only = on;
, что пользователь не может поменять его.