【问题标题】:Postgres - Peer authentication - psql: FATAL: role "xxxx" does not existPostgres - 对等身份验证 - psql:致命:角色“xxxx”不存在
【发布时间】:2016-11-17 20:06:46
【问题描述】:

我知道有很多帖子都带有密切的信息。我已经阅读了所有希望。并没有找到答案。一些提议使用-h localhostlocal 跳转到host 中的host 规则hba.conf。有人说要在local 上设置trust...但我想要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?.. 所以我在postgresql.conf 中检查unix_socket_directories 并根据 psql手册:

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

试试psql t -h '/path/to/unix_socket_directories' 瞧——我就在那儿

这不是我第一次踩到这个耙子! 所以我把它贴在这里 - 希望它会帮助别人。

【问题讨论】:

    标签: postgresql sockets


    【解决方案1】:

    该错误具有误导性。

    而不是

    psql: FATAL: 角色“xxx”不存在

    应该是

    psql: FATAL: 套接字“yyy”不存在

    或其他任何东西,这会让我们产生这样的想法,即我们缺乏 Environment Variables

    export PGHOST=/var/run/postgresql这样的东西会治病

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 2011-02-25
      • 2017-12-20
      • 2013-06-30
      • 2015-03-28
      • 1970-01-01
      • 2018-02-18
      相关资源
      最近更新 更多