Раздел помощи SpaceWeb

Как создать пользователя PostgreSQL: инструкция

26 июл, 2024

PostgreSQL – мощная система управления базами данных с открытым исходным кодом, которая используется во всем мире для управления данными. Создание пользователей в PostgreSQL – это одна из основных задач администратора базы данных. В этой статье мы подробно рассмотрим процесс создания пользователей в PostgreSQL.

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

Создание пользователя PostgreSQL 

Способ 1. С помощью CREATE USER 

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

Создание суперпользователя

Чтобы создать суперпользователя с паролем и правами администратора в PostgreSQL, выполните следующие шаги:

  1. Сначала откройте командную строку через утилиту psql или используя команду:
psql -U <имя-пользователя> 

  1. Затем введите следующую команду:
CREATE USER имя WITH PASSWORD 'пароль' SUPERUSER;

Где «имя» и «'пароль'» – соответствующие значения.

Когда вы выполните команду, в системе появится пользователь с правами администратора. Это позволит ему полностью управлять базой данных (БД). 

Создание обычного пользователя

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

CREATE USER имя WITH PASSWORD ‘пароль’;

Где «имя» и «'пароль'» – соответствующие значения.

Помимо этого, вы можете добавить дополнительные параметры, например, ограничения на подключение или права доступа к БД:

CREATE USER имя WITH PASSWORD 'пароль' CONNECTION LIMIT 10;

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

Способ 2. Через pgAdmin

Если вы предпочитаете использовать интерфейс администрирования, такой как pgAdmin, создание новых пользователей выполняется следующим образом:

  1. Откройте pgAdmin и подключитесь к серверу PostgreSQL.
  2. В левой панели навигации выберите базу данных, в которой вы хотите создать пользователя.
  3. Щёлкните правой кнопкой мыши на «Login/Group Roles». 
  4. Выберите «Create», а затем – «Login/Group Role».
  5. В появившемся окне заполните следующую информацию:
  • В разделе General в поле Name введите имя пользователя.
  • В разделе Definition в поле Password введите пароль новой учётной записи.

Здесь же можно настроить дополнительные параметр: CONNECTION LIMIT и дату истечения прав учётной записи. Чтобы установить неограниченное количество подключений, задайте значение CONNECTION LIMIT на -1. Если для пользователя задан вход без пароля, то значение в поле Account expires применяться не будет. 

  1. В разделе Privileges выберите необходимые привилегии. Например, включите опцию «Can login?», нажав на переключатель справа, чтобы разрешить пользователю вход в систему. Здесь же можно назначить пользователю права суперпользователя с помощью опции «Superuser?».
  2. В разделе Membership вы можете назначить пользователю специфические роли. 
  3. Проверьте сгенерированный SQL-код на крайней правой вкладке и затем нажмите кнопку Save, чтобы создать пользователя с выбранными параметрами.

Готово! Теперь пользователь создан. Вы можете увидеть его в списке «Login/Group Roles».

Различие в командах CREATE USER и CREATE ROLE

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

Команда CREATE ROLE часто используется для создания роли без права входа в систему. Это означает, что созданная роль не сможет подключаться к серверу PostgreSQL и выполнять операции в базе данных: например, пользователю не будет доступно добавление, изменение и удаление данных. Это полезно, если вам нужно создать роль только для чтения, например:

CREATE ROLE user;

Команду CREATE USER обычно используют, чтобы создать роли с возможностью входа в систему. Значит, созданный пользователь сможет подключаться к серверу PostgreSQL и выполнять различные операции в базе данных.

Таким образом, команда CREATE USER – это, по сути, команда CREATE ROLE с опцией LOGIN. Например, команды «CREATE USER user» и «CREATE ROLE user WITH LOGIN» равнозначны.

Добавление и удаление прав с помощью групп 

В Postgres роли могут наследовать привилегии от других ролей. А поскольку роль можно назначить как одному пользователю, так и группе, пользователи могут наследовать привилегии от групп или других пользователей. 

В качестве примера давайте создадим две группы: одну с правами только на чтение данных, а другую – с правами на чтение и запись. Затем мы поочерёдно назначим эти группы пользователю и проверим результаты.

Создание групп

  1. Создайте группы, прописав:
CREATE ROLE "read_only_role";
CREATE ROLE "read_write_role";

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

  1. Группе read_only_role дайте права на чтение этой таблицы, а группе read_write_role – права на чтение и запись:
GRANT SELECT ON TABLE swebtbl TO read_only_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE swebtbl TO read_write_role;

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

Группы созданы, но пользователь пока не унаследовал их привилегии. Сначала нужно убедиться, что у пользователя нет прав на чтение данных из таблицы. 

  1. Войдите в базу данных как пользователь sweb_user и выполните команду:
SELECT * FROM swebtbl;

На экране появится ошибка

ERROR: permission denied for table swebtbl

  1. Присвойте пользователю роль на чтение:
GRANT read_only_role TO sweb_user;

Итак, теперь у пользователя есть права на чтение данных из таблицы, но нет прав на вставку данных (а также изменение и удаление).

  1. Заберите у пользователя группу на чтение и присвоим группу с правами на чтение и запись:
REVOKE read_only_role FROM sweb_user;
GRANT read_write_role TO sweb_user;
 

Готово! У пользователя появились права на запись в таблицу.

Изменение и обновление пользователя

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

Формат команды ALTER USER в PostgreSQL включает имя пользователя, за которым следуют различные параметры. В PostgreSQL допустимы следующие изменения:

ALTER USER role_specification WITH ОПЦИЯ1 ОПЦИЯ2 ОПЦИЯ3;

  1. Если вы допустили ошибку при назначении разрешений и хотите их отозвать, можно использовать команду ALTER USER с необходимыми параметрами.

Например, чтобы удалить статус SUPERUSER у пользователя swebusr, выполните следующую команду:

ALTER USER swebusr WITH NOSUPERUSER;

  1. Чтобы снова предоставить пользователю swebusr права суперпользователя, используйте следующую команду:
ALTER USER swebusr WITH SUPERUSER;

Удаление пользователя

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

Важно! Удаление пользователя не затронет саму базу данных, однако могут возникнуть проблемы, если этот пользователь – владелец каких-либо объектов в базе данных.

Синтаксис: 

DROP USER имя_пользователя

  1. Убедитесь, что он не владеет какими-либо объектами в базе данных. В противном случае, вы получите сообщение об ошибке:
ERROR:  role "имя_пользователя" cannot be dropped because some objects depend on it

  1. Если пользователь действительно владелец объектов, вам нужно сначала сменить его. Например, чтобы сменить владельца таблицы, пропишите:
ALTER TABLE название_таблицы OWNER TO новый_владелец;

Чтобы сменить владельца базы данных, выполните:

ALTER DATABASE название_базы_данных OWNER TO новый_владелец;

  1. Теперь можно удалить пользователя:
DROP USER имя_пользователя;

Заключение

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

Теперь, следуя нашим инструкциям, вы сможете:

  • создавать новых пользователей с помощью команд CREATE USER и CREATE ROLE;
  • назначать и изменять привилегии пользователей с помощью команд GRANT и ALTER USER;
  • управлять наследованием привилегий через группы ролей;
  • удалять пользователей.

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