Назад | Перейти на главную страницу

Разрешения пользователя PostgreSQL

Я пытаюсь перейти с MySQL на PostgreSQL, но считаю, что система учетных записей / разрешений пользователей совсем другая.

В mysql все учетные записи обрабатываются внутри mysql. С postgres мне кажется, что мне нужно создать учетную запись в системе, а также в postgres.

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

Вам нужно только создать системных пользователей, если вы хотите использовать локальную аутентификацию.

Для сетевых подключений вы используете CREATE USER и GRANT так же, как вы привыкли в MySQL.

Основное отличие состоит в том, что в отличие от MySQL, где части аутентификации и авторизации находятся внутри таблиц в базе данных mysql, часть правил аутентификации для Postgres находится во внешнем файле pg_hba.conf).

Чтобы позволить пользователю foo подключаться к панели базы данных из 10.1.1.0/24, вам нужна такая строка в этом файле:

host bar foo 10.1.1.0/24 md5

После редактирования pg_hba.conf не забудьте запустить

pg_ctl reload

чтобы перезагрузить конфиг.

Когда пользователь пытается подключиться, он должен будет предоставить пароль (который вы указали при создании пользователя).

Также помните, что в PostgreSQL все является ролью. Роль, которую вы определяете как «WITH LOGIN», является пользователем, а роль, у которой нет этого флага, больше похожа на группу. Для гибкости я обычно создаю пользователей с паролями и С ЛОГИНОМ. Затем я создаю роли без паролей и предоставляю эту роль пользователям, входящим в систему. Я даю права групповой роли, а не отдельным пользователям.

В pg_hba.conf используйте + role для соответствия любому, кому назначена роль (вместо foo в приведенном выше примере)

Обратите внимание, что если учетная запись postgresql настроена на использование как идентификатора, так и md5, то по умолчанию она будет пытаться использовать идентификатор.

Вы можете заставить его использовать имя пользователя / пароль (например, md5), добавив параметр --host = localhost в конец командной строки psql или аналогичный.

Это заставляет соединение проходить через сокеты, что отключает идентификатор и, следовательно, вызывает аутентификацию имени пользователя и пароля.