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

Есть ли способ настроить postgres для аутентификации пользователей на основе пользователя, под которым они вошли в систему?

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

sudo su - postgres
psql -U USER ...etc

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

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

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer

Эта конфигурация должна позволить вам войти в PostgreSQL как пользователь базы данных postgres без пароля, если вы также запускаете сценарий или соединение как пользователь postgres на стороне Linux.

См. Также документацию PostgreSQL по файл pg_hba.conf и одноранговая аутентификация

Ты можешь использовать Карты имен пользователей для peer или ident методы аутентификации.

Предположим, у вас есть пользователь linux с именем admin. У вас должна быть строка в pg_hba.conf файл, подобный этому;

#local      database  user        auth-method  [auth-options]
local       all       postgres    peer         map=linuxusers

Затем вы должны создать отображение пользователя в pg_ident.conf;

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
linuxusers      postgres                 postgres
linuxusers      sahap                    postgres
linuxusers      carson                   postgres

Наконец перезагрузите postgresql.