Postgres - 对等身份验证 - psql:致命:角色“xxxx”不存在

时间:2016-11-17 12:06:46

标签: postgresql sockets

我知道有很多帖子都有贴心的消息。我希望所有人都阅读。并没有找到答案。有些人要求使用-h localhostlocal中的host跳到hba.conf个规则。有人说要在trust上设置local ...但我想要peer身份验证,而不是TCP而不是信任!

所以我在OSDB上都有用户vao:

t=# \! who am i
vao      pts/8        2016-11-11 12:23 (10.1.10.158)

t=# \du+ vao
                  List of roles
 Role name | Attributes | Member of | Description
-----------+------------+-----------+-------------
 vao       | Superuser  | {}        |

然而当我尝试使用psql时出现错误:

$ psql t
psql: FATAL:  role "vao" does not exist

根据docs

  

对等身份验证方法通过获取客户端来工作   来自内核的操作系统用户名并将其用作允许的   数据库用户名(带有可选的用户名映射)。这个方法是   仅在本地连接上受支持。

  

对等身份验证仅适用于提供的操作系统   getpeereid()函数,SO_PEERCRED套接字参数,或   类似机制。目前包括Linux,大多数BSD版本   包括OS X和Solaris。

所以我看看Debian是否支持getpeereid() 或SO_PEERCRED并拼命寻找解释。

在我重新评估之前,我明显缺乏环境设置。如果psql找不到用户,也许它找不到socket? 所以我在unix_socket_directories中查看postgresql.conf 并根据 psql手册:

  

- 主机=主机名        指定服务器所在机器的主机名        运行。如果值以斜杠开头,则将其用作        Unix域套接字的目录。

尝试psql t -h '/path/to/unix_socket_directories'并瞧 - 我在那里

这不是我第一次踏上这个耙子! 所以我在这里发布 - 希望它会帮助某人。

1 个答案:

答案 0 :(得分:1)

该错误具有误导性。

而不是

  

psql:致命:角色“xxx”不存在

应该是

  

psql:致命:套接字“yyy”不存在

或其他任何可能导致我们认为缺少Environment Variables

的想法

export PGHOST=/var/run/postgresql那样的smth会治愈这种疾病