我使用以下命令安装了 PostgreSQL:
$ sudo apt install postgresql postgresql-contrib libpq-dev
两个都帮助中心和Digitalocean同意,在安装时,Postgres 设置为使用ident
身份验证,“这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户关联。如果 Postgres 中存在角色,则具有相同名称的 Unix/Linux 用户名可以以该角色登录。”
但是,在默认的客户端身份验证配置文件中,身份验证设置为peer
或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
?
答案1
ident
PostgreSQL 文档中提到身份验证方法列表:
Ident 身份验证,它依赖于客户端机器上的“识别协议”(RFC 1413)服务。(在本地 Unix 套接字连接上,这被视为对等身份验证。
像这样的规则pg_hba.conf
local all postgres peer
意味着如果连接来自 Unix 域套接字(TYPE column=local),并且数据库是什么(database column=all),并且如果用户是postgres
,那么要使用的身份验证方案就是peer
。
如果ident
有而peer
不是没什么区别根据上面的评论,它们对于本地连接的含义相同。
问题peer
中指向的其他规则位于最左边的列中,因此它也适用于它们。pg_hba.conf
local
到 localhost(127.0.0.1
或)的 TCP 连接未在as::1
中提及,此值仅表示 Unix 域套接字。这有时会造成混淆,因为人们经常将通过 localhost(127.0.0.1)的 TCP 连接也称为本地连接。pg_hba.conf
local
它们通常默认配置为使用密码,如下所示:
host all all 127.0.0.1/32 md5
答案2
您当前使用的是密码验证,并且选择了md5算法进行加密,以下是重置密码的步骤
切换到 PostgreSQL 用户
切换到默认的 PostgreSQL 用户 postgres:
su - postgres
然后尝试连接到 PostgreSQL:
psql
正确、有效的回应将类似于:
psql (9.3.9)
Type "help" for help.
postgres=#
添加/更改 PostgreSQL 用户的密码
使用以下命令更改当前用户的密码,该用户应为 postgres:
\password
输入您的新密码并确认:
Enter new password:
Enter it again:
现在退出psql界面:
\q
编辑身份验证方法
编辑配置文件:
vim /var/lib/pgsql/9.3/data/pg_hba.conf
寻找:
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
将每个 ident 更改为 md5:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
然后退出并使用命令:wq保存文件。
现在重新启动 PostgreSQL:
systemctl restart postgresql-9.3
验证您的访问权限
切换回postgres用户:
su - postgres
输入PostgreSQL命令行:
psql
您将收到以下提示(或类似提示):
Password:
psql (9.3.9)
Type "help" for help.
输入您的密码即可进入!