====== Приклад створення системи ролей для нового застосунку ====== ===== Опис ===== На початку маємо інстанс Постгреса //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;