提问者:小点点

如何使普通linux用户在没有sudo访问的情况下访问postgres数据库?


我们在Centos7上安装了postgres数据库服务器(10.3),并创建了一个名为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个答案

匿名用户

我找到了解决方案。问题的原因是没有 /var/run/postgresql/.s.PGSQL.5432文件存在。默认情况下,unix_socket_directories是postgresql. conf中设置的“/tmp”。

出于某种原因,普通的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 

匿名用户

在PostgreSQL中,您应该创建一个角色来访问DB。

为此,您必须这样做:

>

  • 更改为postgres帐户(在安装postgresql期间创建)

    $ sudo -i -u postgres
    

    创建新角色

    postgres@server createuser --interactive
    
    Output
    Enter name of role to add: DB_Name
    Shall the new role be a superuser? (y/n) y
    

    创建数据库

    postgres@server createdb DB_Name
    

    创建用户,改为用户并访问数据库

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

    参考资料:

    如何在CentOS 7上安装和使用PostgreSQL