Postgres выдача привилегий - PullRequest
0 голосов
/ 10 января 2020

Мне нужно создать одну базу данных [myDB] и одну пользовательскую схему [mySchema], а не общедоступную c одну.

Где я go ошибся:

Я создал 3 users: user_admin, user_rw, user_ro, которому будет предоставлен доступ с изменением.

Теперь я авторизируюсь с моим суперпользователем: postgres [Я использую postgres 11 на GCP] через облачную оболочку.

Создал мою базу данных: myDB, я вошел в myDB. И я запустил следующие команды для доступа всех 3 пользователей.

# for admin user
GRANT CONNECT ON DATABASE myDB TO user-admin;
GRANT USAGE ON SCHEMA mySchema TO user-admin ;
GRANT ALL PRIVILEGES ON SCHEMA mySchema TO user-admin ;
GRANT ALL ON ALL TABLES IN SCHEMA mySchema TO user-admin ;
GRANT ALL ON ALL SEQUENCES IN SCHEMA mySchema TO user-admin ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-admin ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT ALL PRIVILEGES ON TABLES TO user-admin;

# for read write user
GRANT CONNECT ON DATABASE myDB TO user-rw;
GRANT USAGE ON SCHEMA mySchema TO user-rw ;
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
GRANT SELECT,UPDATE ON ALL SEQUENCES IN SCHEMA mySchema TO user-rw ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-rw ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT SELECT,INSERT,UPDATE ON TABLES TO user-rw;


# for read only user 
GRANT CONNECT ON DATABASE myDB TO user-ro;
GRANT USAGE ON SCHEMA mySchema TO user-ro ;
GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO user-ro ;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO user-ro ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-ro ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT SELECT ON TABLES TO user-ro;

До этого момента у меня не было никаких проблем.

Я создал таблицу в mySchema с помощью user-admin, это будет работать так же и в будущем.

И остальные два пользователя будут использовать только для чтения, а другой для чтения-записи. .

Проблема в том, что я не могу увидеть созданную таблицу от других пользователей, включая postgres, user-rw, user-ro, но только владелец, который был user-admin, имеет доступ для выполнения всех операций. например create and drop.

Кроме того, после создания таблицы от пользователя admin, когда я повторно запускаю команду, указанную ниже, это дает мне разрешение на отказ.

GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;

Пожалуйста, дайте мне знать, что я делаю неправильно.

1 Ответ

0 голосов
/ 10 января 2020
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;

VS

ALTER DEFAULT PRIVILEGES IN SCHEMA public
   GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;

первая опция дает права на существующие таблицы, вторая опция дает вам разрешение на существующие и новые, которые я буду создавать в будущем,

но он лучше всего не применяет эти разрешения непосредственно к пользователю, создает группу и предоставляет там разрешения и назначает группу пользователю, причина, по которой вы хотите сначала удалить пользователя, вам нужно удалить все созданные привилегии и после того, как вы можете удалить пользователя.

Кроме того, после создания таблицы от пользователя-администратора, когда я перезапущу команду ниже, это дает мне разрешение отклонено.

GRANT SELECT, INSERT, ОБНОВЛЕНИЕ ВСЕХ ТАБЛИЦ В SCHEMA mySchema TO user-rw;

об этой части, убедитесь, что вы используете администратора, чтобы дать разрешение.

...