PostgreSQL 默认身份验证方法

PostgreSQL 默认身份验证方法

我使用以下命令安装了 PostgreSQL:

$ sudo apt install postgresql postgresql-contrib libpq-dev   

两个都帮助中心Digitalocean同意,在安装时,Postgres 设置为使用ident身份验证,“这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户关联。如果 Postgres 中存在角色,则具有相同名称的 Unix/Linux 用户名可以以该角色登录。”

但是,在默认的客户端身份验证配置文件中,身份验证设置为peermd5

$ 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

identPostgreSQL 文档中提到身份验证方法列表

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.conflocal

到 localhost(127.0.0.1或)的 TCP 连接未在as::1中提及,此值仅表示 Unix 域套接字。这有时会造成混淆,因为人们经常将通过 localhost(127.0.0.1)的 TCP 连接也称为本地连接。pg_hba.conflocal

它们通常默认配置为使用密码,如下所示:

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.

输入您的密码即可进入!

以供参考:
        https://www.postgresql.org/docs/9.1/auth-methods.html

相关内容