Как предоставить обычным пользователям Linux доступ к базе данных postgres без доступа sudo? - PullRequest
0 голосов
/ 26 апреля 2018

У нас есть сервер базы данных postgres (10.3), установленный на Centos7, и мы создали базу данных с именем "db_name".У нас есть доступ к базе данных.Настройка в pg_hba.conf следующая:

# "local" is for Unix domain socket connections only
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

Когда у меня есть доступ sudo, я могу получить доступ к базе данных "db_name".

[root@localhost bin]# sudo -s       
[root@localhost bin]# psql -U db_name db_user
psql (10.3)
Type "help" for help.

db_name=>

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

[linuxuser@localhost bin]# psql -U db_name db_user
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Причина, по которой мы хотим ограничить доступ некоторых пользователей к sudo, заключается в том, что наш отчетспециалистам нужен доступ к базе данных «db_name», но мы не хотим, чтобы они имели привилегию sudo для других действий.

Какие настройки я должен выполнить, чтобы она работала?Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я нашел решение.Причина проблемы в том, что файл /var/run/postgresql/.s.PGSQL.5432 не существует.По умолчанию unix_socket_directories - это '/ tmp', который установлен в postgresql.conf.

По какой-то причине обычный пользователь Linux не смотрит на /tmp/.s.PGSQL.5432, а вместо этого смотрит на /Файл var / run / postgresql / .s.PGSQL.5432.

Исправление выглядит следующим образом:

cd /var/run
mkdir postgresql 
cd postgresql/ 
ln -s /tmp/.s.PGSQL.5432 .s.PGSQL.5432 

Также работает следующая команда.

psql -h /tmp -U db_user db_name 
0 голосов
/ 26 апреля 2018

В PostgreSQL вы должны создать роль для доступа к БД.

Для этого вам нужно будет сделать следующее:

  1. Сменить учетную запись postgres (Создана во время установкииз postgresql)

    $ sudo -i -u postgres
    
  2. Создать новую роль

    postgres@server createuser --interactive
    
    Output
    Enter name of role to add: DB_Name
    Shall the new role be a superuser? (y/n) y
    
  3. Создать базу данных

    postgres@server createdb DB_Name
    
  4. Создание пользователя, изменение пользователя и доступ к базе данных

    $ sudo adduser DB_Name
    $ sudo -i -u DB_Name
    $ psql
    DB_Name=# \conninfo
    

Ссылки:

Как установить и использовать PostgreSQL на CentOS 7

...