Користувальницькькі налаштування

Налаштування сайту


programming:databases:postgresql:new_app_proposal

Приклад створення системи ролей для нового застосунку

Опис

На початку маємо інстанс Постгреса mydb. Для нового проєкту створюємо нову базу даних в цьому інстансі, і двох користувачів: example_migrator може робити все в цій БД, а example_user може читати та писати в таблиці БД.

Тільки example_migrator має створювати нові схеми, таблиці, функції в цій БД! Користувач example_user може лише додавати, модифікувати та видаляти записи в таблицях.

Створення користувачів

CREATE ROLE example_migrator WITH PASSWORD 'putsecrethere' NOSUPERUSER NOCREATEDB LOGIN;
CREATE ROLE example_user WITH PASSWORD 'putsecrethere' NOSUPERUSER NOCREATEDB LOGIN;

Створення бази даних та призначення прав

наступні операції виконати під адміном, наприклад, rds_superuser:

GRANT example_migrator TO CURRENT_USER WITH ADMIN option;
CREATE DATABASE exampledb WITH OWNER example_migrator;
GRANT CONNECT ON DATABASE exampledb TO example_user;
ALTER DEFAULT PRIVILEGES FOR ROLE example_migrator GRANT USAGE ON SCHEMAS TO example_user;
ALTER DEFAULT PRIVILEGES FOR ROLE example_migrator GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO example_user;
REVOKE example_migrator from CURRENT_USER;

Це створить нову БД exampledb. Користувач example_migrator стане її оунером і тому матиме всі права. Користувачу example_user надається право на підключення до нової БД, а також право модифікувати записи в усіх майбутніх таблицях і підключатися до всіх майбутніх схем цієї БД

Додавання нових користувачів пізніше

Після цього через деякий час (вже створені якісь таблиці) може знадобитися додати нового користувача, тільки для читання (хай це буде користувач dbuser2):

GRANT example_migrator TO CURRENT_USER WITH ADMIN option;
GRANT CONNECT ON DATABASE exampledb TO dbuser2;
ALTER DEFAULT PRIVILEGES FOR ROLE example_migrator GRANT USAGE ON SCHEMAS TO dbuser2;
ALTER DEFAULT PRIVILEGES FOR ROLE example_migrator GRANT SELECT ON TABLES TO dbuser2;
REVOKE example_migrator from CURRENT_USER;

Далі треба перепідключитися до БД exampledb і додати права на існуючи таблиці та схеми:

GRANT USAGE ON SCHEMA exampleschema TO dbuser2;
GRANT SELECT ON ALL TABLES IN SCHEMA exampleschema TO dbuser2;
programming/databases/postgresql/new_app_proposal.txt · Востаннє змінено: 2021/08/13 16:18 повз charon