我有一台远程计算机,我正在尝试使用以下命令登录到postgres数据库(通过root
作为Linux ssh
用户运行,即在该计算机上本地运行):
# psql -d mydatabase -U postgres -W
Password for user postgres: <here goes my password>
psql: FATAL: Peer authentication failed for user "postgres"
由于某种原因,它失败了(尝试了~5次)。
但是当我使用具有相同角色(postgres)和相同密码的pgAdmin(即远程)登录同一个数据库时,它每次都会成功登录。
我使用psql
命令有什么问题?如果正确,您能否建议任何故障排除步骤?
编辑:问题是在pg_hba.conf
远程和本地连接的处理方式不同。远程配置正确。问题是为什么当地人不能工作。
对于当地人,我在pg_hba.conf
:
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
我是否正确理解,对于localhost
连接,它首先尝试对等身份验证,如果失败则不会尝试md5
并且只返回错误?
答案 0 :(得分:0)
psql默认是尝试通过peer登录。这意味着,您必须在本地计算机上以postgres身份登录。你可以强制psql使用TCP / IP,你需要tpo指定一个主机,它可以是localhost,所以调用看起来像:
psql -U postgres -h 127.0.0.1
另一种方法是调整您的设置。我看到两种方法可以更改您当前的本地设置:
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
1)通过设置行
,允许所有用户在没有密码的情况下从localhost登录local all all trust
这是非常危险的,不应该做恕我直言。
2)另一种方法是创建一个与您的系统登录具有相同用户名的数据库用户,并授予该帐户的所有权利
当然,在这种情况下我通常会这样做:在postgres用户的上下文中运行psql,例如通过sudo -u postgres psql或su -u postgres -c“psql ...”