PostgreSQL提供多种不同的客户端认证方式。被用来认证一个特定客户端连接的方法可以基于(客户端)主机地址、数据库和用户来选择。这里我们介绍一些常用的认证方式。
1、PostgreSQL如何完成用户认证?
一般当我们安装完PostgreSQL时可以发现,系统为我们创建好了一个名为Postgres的用户和一个名为Postgres的数据库。
我们想要使用这个Postgres用户去连接Postgres数据库时,只需要执行:
pg13@cnndr4pptliot-> psql
psql (13beta3)
Type "help" for help.
postgres=#
但是,当你执行完"psql"这个命令顺利地连接到数据库后,你有没有想过为什么我们没输入密码就直接连接进去了?Postgres这个用户的密码是什么呢?
第二个问题的答案很简单,就是Postgres用户默认是没有密码的,所以我们可以为它去设置个密码:
postgres=# \password
Enter new password:
Enter it again:
postgres=#
那么第一个问题,为什么我们不用输入密码就连到数据库里面了呢?那样不是会很不安全吗?这也就是和我们要介绍的PostgreSQL的用户认证方式有关了。
我们用过$PGDATA目录下的pg_hba.conf文件来设置用户认证的方式,这里我们来介绍一些常用的认证方式:
2、PostgreSQL认证方式
2.1、Peer认证
Peer 认证方法通过从内核获得客户端的操作系统用户名并把它用作被允许的数据库用户名(和可选的用户名映射)来工作。这种方法只在本地连接上支持。
例如这里我的pg数据库是安装在pg13这个用户下面的,那么当我使用peer认证方式时,将无法连接到postgres用户。
pg13@cnndr4pptliot-> psql -U postgres
psql: error: could not connect to server: FATAL: Peer authentication failed