Необходимо ли создавать специальную роль или достаточно создания пользователя с правами только на чтение для определенной базы данных PostGreSQL?

Как добавить пользователя только с чтением (read-only) правами для базы данных "reporting_fph_db" и сервера PostgreSQL, содержащего несколько баз данных? Необходимо добавить только роль пользователя или и пользователя и роль? Кроме того, я хотел бы узнать, нужно ли выполнять команды GRANT после подключения к базе данных reporting_fph_db.

CREATE USER my_x_db_user WITH PASSWORD 'some_strong_pass';

или

CREATE ROLE my_x_db_user WITH LOGIN PASSWORD 'some_strong_pass';

REVOKE ALL PRIVILEGES ON DATABASE reporting_fph_db FROM my_x_db_user;

GRANT CONNECT ON DATABASE reporting_fph_db TO my_x_db_user;
GRANT USAGE ON SCHEMA public TO my_x_db_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_x_db_user;
  • 24 сентября 2023 г. 20:58
Ответы на вопрос 2
Для создания пользователя с правами только на чтение для базы данных PostGreSQL, вы можете использовать команду CREATE ROLE и GRANT. Вам необязательно создавать специальную роль, вы можете добавить пользователя напрямую. Вот как это можно сделать:

1. Создайте пользователя с паролем:
CREATE ROLE my_x_db_user WITH LOGIN PASSWORD 'some_strong_pass';

2. Отзовите все привилегии пользователя для базы данных (необязательно, если пользователь только что создан и не имеет привилегий):
REVOKE ALL PRIVILEGES ON DATABASE reporting_fph_db FROM my_x_db_user;

3. Предоставьте право подключения к базе данных пользователю:
GRANT CONNECT ON DATABASE reporting_fph_db TO my_x_db_user;

4. Предоставьте право использования схемы public пользователю:
GRANT USAGE ON SCHEMA public TO my_x_db_user;

5. Предоставьте право на чтение всех таблиц в схеме public пользователю:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_x_db_user;

Выполняя эти команды, вы создадите пользователя my_x_db_user с правами только на чтение для базы данных reporting_fph_db.
Команда CREATE USER теперь является синонимом команды CREATE ROLE. Основное различие заключается в том, что при использовании CREATE USER по умолчанию предполагается, что пользователь может авторизоваться (LOGIN), а при использовании CREATE ROLE предполагается, что пользователь не может авторизоваться (NOLOGIN). Для выполнения команды GRANT необходимо находиться в базе данных, в которой создан пользователь.
Похожие вопросы