Методы создания пользователя только для чтения с доступом ко всем базам данных в PostgreSQL

Чтобы создать в PostgreSQL пользователя только для чтения с доступом ко всем базам данных, вы можете использовать разные методы. Вот несколько примеров:

Метод 1: использование разрешений GRANT

-- Connect to the PostgreSQL server as a superuser or a user with enough privileges.
-- Run the following command to create a new user:
CREATE USER readonly_user WITH PASSWORD 'password';
-- Grant CONNECT permission to the user:
GRANT CONNECT ON DATABASE dbname TO readonly_user;
-- Grant USAGE permission on all existing schemas:
GRANT USAGE ON ALL SCHEMAS IN DATABASE dbname TO readonly_user;
-- Grant SELECT permission on all tables in all existing schemas:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
-- Grant SELECT permission on all sequences in all existing schemas:
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly_user;
-- Grant EXECUTE permission on all functions in all existing schemas:
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO readonly_user;
-- Repeat the previous three GRANT statements for each schema if you have multiple schemas.
-- Finally, grant the user the necessary privileges on all existing databases:
GRANT CONNECT ON DATABASE dbname TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO readonly_user;

Замените readonly_userна желаемое имя пользователя и passwordна желаемый пароль. Также замените dbnameименем вашей базы данных.

Метод 2: использование роли pg_read_all_data

-- Connect to the PostgreSQL server as a superuser or a user with enough privileges.
-- Run the following command to create a new user:
CREATE USER readonly_user WITH PASSWORD 'password' NOSUPERUSER NOCREATEDB NOCREATEROLE;
-- Grant the pg_read_all_data role to the user:
ALTER USER readonly_user WITH ROLE pg_read_all_data;

Замените readonly_userна желаемое имя пользователя и passwordна желаемый пароль.

Метод 3: использование роли pg_monitor (PostgreSQL 14+)
Начиная с PostgreSQL 14, вы можете использовать роль pg_monitorдля создания пользователя только для чтения с доступом ко всем базам данных. Эта роль имеет ограниченные разрешения, подходящие для целей мониторинга.

-- Connect to the PostgreSQL server as a superuser or a user with enough privileges.
-- Run the following command to create a new user:
CREATE USER readonly_user WITH PASSWORD 'password' NOSUPERUSER NOCREATEDB NOCREATEROLE;
-- Grant the pg_monitor role to the user:
ALTER USER readonly_user WITH ROLE pg_monitor;

Замените readonly_userна желаемое имя пользователя и passwordна желаемый пароль.