Блог компании 3v-Hosting

Добавление нового пользователя в PostgreSQL

Администрирование

6 мин.


PostgreSQL - это мощная реляционная система управления базами данных (РСУБД) с открытым исходным кодом, обладающая широкими возможностями для хранения, поиска и управления данными. В любой многопользовательской среде необходимо эффективно добавлять пользователей и управлять ими, чтобы поддерживать безопасность, предоставлять соответствующие привилегии и обеспечивать бесперебойную работу базы данных. В этой статье представлено подробное пошаговое руководство по добавлению нового пользователя в PostgreSQL, рассматриваются различные перспективы и практические сценарии.

 

 

 

Понятие ролей в PostgreSQL

 

В PostgreSQL используется система управления доступом на основе ролей. Роли в PostgreSQL могут действовать как пользователи или группы, в зависимости от того, как они настроены. Каждая операция с базой данных, выполняемая пользователем, выполняется в рамках назначенной ему роли. Перед созданием нового пользователя необходимо разобраться с ролями, поскольку пользователь - это, по сути, роль с атрибутом LOGIN.

 

Роли могут иметь различные разрешения, например:

    - Возможность создавать базы данных (CREATEDB).
    - Привилегия на создание других ролей (CREATEROLE).
    - Возможность доступа к серверу баз данных (LOGIN).

 

При добавлении нового пользователя важно учитывать необходимые разрешения и ограничения роли, чтобы обеспечить безопасный и эффективный доступ к базе данных.

 

 

 


Подготовка среды

 

Перед добавлением нового пользователя убедитесь, что у вас есть доступ к серверу PostgreSQL с административными привилегиями. Административные роли, такие как postgres (суперпользователь по умолчанию), имеют необходимые полномочия для управления ролями и привилегиями.

Чтобы войти в систему под пользователем postgres, выполните следующую команду:

    sudo -i -u postgres

После входа в систему получите доступ к интерфейсу командной строки PostgreSQL (psql), выполнив команду:

    psql

Теперь вы готовы к добавлению нового пользователя.

 

 

 

Добавление нового пользователя в PostgreSQL

 

Чтобы создать нового пользователя, PostgreSQL предоставляет команду CREATE ROLE, которая может использоваться в сочетании с определенными атрибутами. Новый пользователь должен иметь атрибут LOGIN, чтобы получить доступ к базе данных.

Вот базовый пример добавления нового пользователя:

    CREATE ROLE new_user WITH LOGIN PASSWORD 'secure_password';


    new_user: Замените это на имя пользователя, которое вы хотите создать.
    PASSWORD: Всегда выбирайте надежный пароль для обеспечения безопасности.


В качестве альтернативы можно использовать сокращенную команду:

    CREATE USER new_user WITH PASSWORD 'secure_password';

Команда CREATE USER - это упрощенная версия CREATE ROLE, которая автоматически включает атрибут LOGIN.

 


 

Другие полезные статьи в нашем Блоге:


    - Создание нового пользователя и управление привилегиями в MySQL

    - Подробное руководство: как найти и оптимизировать медленные запросы в MySQL

    - Как удаленно подключиться к MySQL

    - Оператор Bash "If": синтаксис, варианты использования, команды и многое другое!

 


 

Назначение привилегий новому пользователю

 

По умолчанию новый пользователь не имеет прав ни на одну базу данных. Чтобы разрешить пользователю взаимодействовать с определенной базой данных, необходимо явно назначить привилегии.

Предоставить доступ к базе данных: Назначьте новому пользователю доступ к базе данных:

    GRANT CONNECT ON DATABASE example_db TO new_user;


Предоставьте доступ к схеме: Если база данных имеет несколько схем, предоставьте доступ к определенной схеме:

    GRANT USAGE ON SCHEMA public TO new_user;


Предоставить привилегии на уровне таблиц: Разрешите пользователю взаимодействовать с таблицами:

    GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO new_user;


Предоставление будущих привилегий: Чтобы обеспечить пользователю привилегии для таблиц, созданных в будущем:

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO new_user;

Назначение минимально необходимых привилегий - важнейшая практика обеспечения безопасности баз данных, позволяющая снизить потенциальные риски.

 

 

 

 

Лучшие практики управления пользователями в PostgreSQL

 

Используйте групповые роли: Вместо того чтобы управлять привилегиями отдельных пользователей, создайте групповые роли с заранее определенными правами и назначьте пользователей в эти группы. Например:

    CREATE ROLE dev_team WITH LOGIN PASSWORD 'team_password';
    GRANT CONNECT, TEMPORARY ON DATABASE example_db TO dev_team;


Добавьте отдельных пользователей в группу:

    GRANT dev_team TO new_user;


Регулярно меняйте пароли: Обеспечьте регулярное обновление паролей, чтобы минимизировать уязвимости безопасности.

    ALTER USER new_user WITH PASSWORD 'new_secure_password';


Проводите аудит действий пользователей: Используйте функции протоколирования PostgreSQL для мониторинга активности пользователей и обеспечения соответствия политикам доступа.
Отмените ненужные привилегии: Периодически пересматривайте и отменяйте ненужные привилегии, чтобы предотвратить «ползучий рост» привилегий:

    REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM new_user;

 

 

 

 

Автоматизация создания пользователей с помощью сценариев

 

В средах, где создание пользователей происходит часто, автоматизация может сэкономить время и обеспечить последовательность действий. Ниже приведен пример простого сценария для добавления нового пользователя:

    #!/bin/bash
    USER_NAME=$1
    PASSWORD=$2
    DATABASE=$3

    psql -U postgres -c "CREATE USER $USER_NAME WITH PASSWORD '$PASSWORD';"
    psql -U postgres -c "GRANT CONNECT ON DATABASE $DATABASE TO $USER_NAME;"


Сохраните этот скрипт под именем create_user.sh и запустите его с необходимыми аргументами:

    bash create_user.sh new_user secure_password example_db

Этот подход особенно полезен для конвейеров DevOps и рабочих процессов CI/CD.

 

 

 

Распространенные ошибки и устранение неполадок

 

    Ошибка: role "new_user" does not exist: Убедитесь, что пользователь был создан и ему присвоен атрибут LOGIN.
    Ошибка: permission denied for database: Убедитесь, что пользователь имеет соответствующую привилегию CONNECT для базы данных.
    Ошибка: could not connect to server: Убедитесь, что PostgreSQL запущен и принимает соединения на указанном порту.

 

 

 

Заключение

Добавление нового пользователя в PostgreSQL - это фундаментальная задача, которая требует тщательного рассмотрения управления ролями, назначения привилегий и лучших практик безопасности. Понимая ролевую архитектуру PostgreSQL и следуя структурированным процессам, администраторы могут эффективно управлять пользователями, обеспечивая целостность и безопасность базы данных. Освоение управления пользователями необходимо для эффективного администрирования баз данных, независимо от того, работаете ли вы в небольшой среде разработки или в крупной корпоративной системе.