我使用以下命令安装了 PostgreSQL:
$ sudo apt install postgresql postgresql-contrib libpq-dev
help.ubuntu.com和Digitalocean都同意,在安装后,Postgres 设置为使用身份验证,“这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户相关联。如果 Postgres 中存在角色,则为 Unix/Linux 用户名具有相同名称的人能够以该角色的身份登录。”ident
但是,在默认客户端身份验证配置文件中,身份验证设置为peer
or md5
:
$ sudo less /etc/postgresql/10/main/pg_hba.conf
...
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
我使用 PostgreSQL 作为 Ruby on Rails 的开发数据库,它运行良好。考虑到我从未编辑过,我正在使用什么身份验证方法pg_hba.conf
?
ident
PostgreSQL 文档在其身份验证方法列表中说:像这样的规则
pg_hba.conf
表示如果连接来自 Unix 域套接字(TYPE 列=本地),并且无论数据库是什么(数据库列=全部),并且如果用户是
postgres
,那么要使用的身份验证方案是peer
。如果
ident
存在而不是,则根据上面的评论说它们对本地连接的含义相同peer
,这不会有任何区别。问题中指向的其他规则
peer
位于最左侧的列中,因此它也适用于它们。pg_hba.conf
local
127.0.0.1
到 localhost (或::1
) 的TCP 连接在pg_hba.conf
as中没有引用local
,这个值仅表示 Unix 域套接字。这有时会让人感到困惑,因为人们经常将通过 localhost (127.0.0.1) 的 TCP 连接也称为本地连接。它们通常默认配置为使用密码,如下所示:
您当前正在使用密码验证,并且您选择了 md5 算法进行加密,这里是重置密码的过程
切换到 PostgreSQL 用户
切换到默认的 PostgreSQL 用户 postgres:
然后尝试连接到 PostgreSQL:
正确、有效的响应类似于:
添加/更改 PostgreSQL 用户的密码
使用以下命令更改当前用户的密码,应该是 postgres:
输入新密码并确认:
现在退出 psql 界面:
编辑身份验证方法
编辑配置文件:
寻找:
将每个 ident 更改为 md5:
然后退出并使用命令 :wq 保存文件。
现在重新启动 PostgreSQL:
验证您的访问权限
切换回 postgres 用户:
输入 PostgreSQL 命令行:
应该提示您以下(或类似):
输入你的密码,你就进去了!
供参考:
https ://www.postgresql.org/docs/9.1/auth-methods.html