【发布时间】:2016-11-17 20:06:46
【问题描述】:
我知道有很多帖子都带有密切的信息。我已经阅读了所有希望。并没有找到答案。一些提议使用-h localhost 从local 跳转到host 中的host 规则hba.conf。有人说要在local 上设置trust...但我想要peer 身份验证,而不是超过TCP 并且不受信任!
所以我在 OS 和 DB 上都有用户 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