Разрешение на текущие объекты
иметь доступ для чтения/записи таблиц читать, вам нужно использовать GRANT
command в 3-х уровнях:
- БАЗА ДАННЫХ
- СХЕМА
- TABLES, функции, последовательности и т.д.
Во-первых, вам нужно CONNECT
привилегию на базе:
GRANT CONNECT ON DATABASE <dbname> TO <username>;
Во-вторых, вам нужно USAGE
привилегию на схеме внутри базы данных (вы должны подключиться к базе данных перед запуском):
GRANT USAGE ON SCHEMA <schemaname> TO <username>;
Наконец, вы можете предоставить привилегию по таблицам, предположим, что вы хотите использовать общие DML и SELECT для всех таблиц в схеме и другие разрешения:
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA <schemaname> TO <username>;
-- and the sequences, for INSERT to work
GRANT USAGE ON ALL SEQUENCES IN SCHEMA <schemaname> TO <username>;
-- and the functions
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA <schemaname> TO <username>;
По умолчанию разрешение для объектов, созданных в будущем
Теперь вы должны заметить что-то. У каждой базы данных и каждой схемы и каждого объекта (таблицы, функции и т. Д.) Есть владелец. Владелец - это пользователь, который будет управлять и запускать DDL-команды на нем. Как правило, вы должны запускать все вышеперечисленные команды при подключении как пользователя, которому принадлежит все, потому что у этого пользователя уже есть все разрешения (вы также можете использовать SUPERUSER
, но я рекомендую хранить его только для задач DBA).
Вышеуказанные команды GRANT ... ON ALL ... IN SCHEMA
предоставят разрешения для объектов, уже присутствующих в базе данных, но не будут применяться к новым созданным объектам. Для этого вы можете использовать ALTER DEFAULT PRIVILEGES
(I'll call it ADP
) command. Как и прежде, вы должны работать, что при подключении в качестве владельца, потому что вы должны иметь в виду, что АДФ применяется только тогда, когда владелец нового объекта совпадает с той, которая используется здесь (или установить в FOR ROLE
clause):
ALTER DEFAULT PRIVILEGES IN SCHEMA <schemaname>
GRANT SELECT,INSERT,UPDATE,DELETE ON TABLES TO <username>;
-- and the sequences, for INSERT to work
ALTER DEFAULT PRIVILEGES IN SCHEMA <schemaname>
GRANT USAGE ON SEQUENCES TO <username>;
-- and the functions
ALTER DEFAULT PRIVILEGES IN SCHEMA <schemaname>
GRANT EXECUTE ON FUNCTIONS TO <username>;
Вы также можете пропустить IN SCHEMA <schemaname>
сверху и применить его для любой схемы, которую вы создали или создаете в будущем. Но опять же, будьте осторожны, даже если вы не указали FOR ROLE <rolename>
, что означает, что он будет применяться к , текущий подключенный к пользователю, поэтому только объекты, созданные этим <rolename>
, рассмотрят команду ADP.
Для хорошего управления разрешениями я настоятельно рекомендую вам следить за тем, какой пользователь владеет объектами. В большинстве случаев я также рекомендую вам хранить только одного владельца для всего, что находится внутри базы данных (если вы не являетесь продвинутым пользователем и не знаете, что делаете), таким образом упростить управление разрешениями.
Вы можете использовать команду GRANT для предоставления разрешений [здесь] (https://www.postgresql.org/docs/9.0/static/sql-grant.html) является официальным документом –
Эта ссылка не имеет ничего общего с инструментом pgadmin – Dave
Вопрос не имеет ничего общего с pgAdmin III, я думаю. Вы можете выпустить пропущенную инструкцию «GRANT» с помощью pgAdmin III, если хотите. –