Ответ
В PostgreSQL для создания пользователя (роли с правом входа) используется команда CREATE ROLE или её псевдоним CREATE USER. Основное отличие — CREATE USER по умолчанию добавляет атрибут LOGIN.
Базовый синтаксис:
CREATE USER app_user WITH PASSWORD 'StrongPass123!';
Создание пользователя с расширенными правами: Часто пользователю приложения нужны права на конкретную базу данных.
-- 1. Создаём пользователя
CREATE USER deploy_user WITH PASSWORD 'DeploySecret456';
-- 2. Создаём базу данных (если её нет)
CREATE DATABASE myapp_prod OWNER deploy_user;
-- 3. Подключаемся к новой БД и даём полные права пользователю (хотя OWNER уже имеет их)
c myapp_prod
GRANT ALL ON SCHEMA public TO deploy_user;
Работа с привилегиями в инфраструктурном контексте (DevOps): В DevOps мы редко выполняем эти команды вручную. Мы используем:
- Миграционные инструменты: Liquibase, Flyway, где создание пользователей и назначение прав — часть скриптов миграции.
-
Инфраструктура как код (IaC):
- Terraform с провайдером PostgreSQL: позволяет декларативно управлять пользователями, базами данных и привилегиями.
resource "postgresql_role" "app_user" { name = "app_user" login = true password = var.db_app_user_password }
resource "postgresql_database" "app_db" { name = "myapp" owner = postgresql_role.app_user.name }
* **Ansible/Puppet/Chef:** модули для управления PostgreSQL. - Terraform с провайдером PostgreSQL: позволяет декларативно управлять пользователями, базами данных и привилегиями.
Проверка:
-- Список всех ролей (пользователей)
du