postgresql用户密码的加密方式你了解多少?

postgresql用户密码默认采用md5方式加密(版本可能存在差异,我的时13.0),不同的加密方式会影响客户端连接时认证,不当的配置会造成客户端连接失败,如:使用md5认证连接配置使用scram-sha-256会造成认证失败。

  • 配置密码加密方式

修改数据库数据存储目录下的postgresql.conf文件

[root@localhost pgsql]# vi data/postgresql.conf

找到password_encryption这行,可以看到默认是注释掉的,即默认使用md5加密,如果想要改成scram-sha-256加密,将md5改成scram-sha-256。

......

#password_encryption = md5                         # md5 or scram-sha-256

password_encryption = scram-sha-256

......

修改后需要重启数据库服务才能使用配置生效

  • 查看用户密码加密方式

系统表pg_authid可以查看加密后的用户密码

[root@localhost pgsql]# su postgres -c 'bin/psql'
psql (13.0)
Type "help" for help.

postgres=# select rolname,rolpassword from pg_authid where rolname='admin' or rolname='drs';
 rolname | rolpassword                                                              
---------+-------------------------------------------------------------------------
 admin   | SCRAM-SHA-256$4096:5YRL9FxIP**************
 drs     | md5024da8fac3***************
(2 rows)

密码开头部分显示了使用何种加密方式,当前创建的用户根据postgresql.conf配置的加方法进行加密,对应的连接配置规则也就根据加密方式进行配置。

查看当前密码加密方式

postgres=# SHOW password_encryption;
 password_encryption 
---------------------
 scram-sha-256
(1 row)
  • 客户端身份验证配置

数据库数据存储目录下的pg_hba.conf文件是客户端身份验证的配置文件,修改客户端连接规则

[root@localhost pgsql]# vi data/pg_hba.conf

找到# IPv4 local connections:这行,添加规则,如:

......

host all all 0.0.0.0/0 scram-sha-256

......

以上5列对应的字段如下:

TYPE DATABASE USER ADDRESS METHOD

  类型 数据库实例 用户 ip地址    认证方式

配置完规则后需要重新加载配置才能生效,如下

[root@localhost pgsql]# su postgres -c 'bin/pg_ctl -D data reload'

在本例中由于drs用户使用的是md5认证,如果使用以上pg_hba.conf配置,远程客户端使用drs登陆将会报认证失败的错误

[root@localhost pgsql]# su postgres -c 'bin/psql -h 192.168.0.22 -U drs -d drs-vue'
Password for user drs: 
psql: error: could not connect to server: FATAL:  password authentication failed for user "drs"
[root@localhost pgsql]# su postgres -c 'bin/psql -h 192.168.0.22 -U admin -d drs-vue'
Password for user admin: 
psql (13.0)
Type "help" for help.

drs-vue=# 

可以通过规则设置不同用户的认证方式,在pg_hba.conf添加以下行

host all drs 0.0.0.0/0 md5

添加规则时注意前后顺序,系统过滤时是自上而下进行依次执行,如果配置不当可能造成认证失败。

注意:配置文件中特别提醒,使用password认证时客户端将以明文方式发送密码,这将影响数据库安全,不建议使用。trust允许无密码任意连接,请谨慎使用。

认证方式还包括"trust", "reject", "md5", "password", "scram-sha-256","gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert",没有一一试过,未完待续。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果你希望在 PostgreSQL 用户表的密码字段上进行特殊的设置,可以考虑以下几种方式: 1. 使用加密算法:可以使用 PostgreSQL 提供的密码加密函数,如 `crypt()` 或 `pgcrypto` 扩展。这些函数可以将密码进行加密,并存储加密后的密码值。这样即使数据库被未经授权的人访问,也无法直接获取到用户的原始密码。可以使用以下示例代码将密码字段加密并插入到用户表中: ```sql -- 创建用户表 CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL ); -- 使用 crypt() 函数将密码进行加密并插入到用户表中 INSERT INTO users (username, password) VALUES ('john', crypt('password123', gen_salt('bf'))); ``` 在上述代码中,`crypt()` 函数将密码进行加密,使用 `gen_salt('bf')` 生成一个随机的 salt 值。 2. 密码策略和强度要求:可以在应用层面或数据库层面实施密码策略和强度要求。这可以包括要求密码长度、包含特殊字符、大写字母、小写字母和数字等。你可以编写自定义的验证逻辑来确保用户输入的密码满足要求。 3. 使用外部认证:如果你希望通过其他身份验证系统(如 LDAP 或 OAuth)来进行用户认证,可以将 PostgreSQL 配置为使用外部认证。这样,密码验证将由外部系统处理,不会在数据库中存储密码。 根据你的具体需求和安全策略,可以选择其中一种或多种方式来特殊设置 PostgreSQL 用户表的密码字段。请根据你的具体情况选择合适的方法,并确保实施适当的安全措施来保护用户密码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值