Postgresql 之 数据库认证

密码存储的安全注意事项 
CREATE ROLE name [ [ WITH ] option [ … ] ] 
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD ‘password’ 
ENCRYPTED 存储为MD5 
UNENCRYPTED 存储为明文

示例: 
alter role rep encrypted password ‘123’; 
ALTER ROLE 
select usename,passwd,md5(‘123rep’) from pg_shadow where usename=’rep’; 
usename | passwd | md5 
———+————————————-+———————————- 
rep | md5a6f8e01c46849ed88d55e3c347ec318a | a6f8e01c46849ed88d55e3c347ec318a 
(1 row)

明文 
alter role rep unencrypted password ‘123’; 
ALTER ROLE 
select usename,passwd,md5(‘123rep’) from pg_shadow where usename=’rep’; 
usename | passwd | md5 
———+——–+———————————- 
rep | 123 | a6f8e01c46849ed88d55e3c347ec318a 
(1 row)

密码复杂度注意事项 
确保已编译passwordcheck, 未编译的话到源码的contrib目录中编译一下 
ll $PGHOME/lib/passwordcheck* 
-rwxr-xr-x 1 root root 14K Oct 13 09:00 /home/pg93/pgsql/lib/passwordcheck.so

修改数据库配置文件 
vi $PGDATA/postgresql.conf 
shared_preload_libraries = ‘passwordcheck,pg_stat_statements,auto_explain’

重启数据库 
pg_ctl restart -m fast 
再次修改密码时, 如果密码太简单会报错 
alter role rep unencrypted password ‘123’; 
ERROR: password is too short

alter role rep unencrypted password ‘rep1234567RER’; 
ERROR: password must not contain user name

alter role rep unencrypted password ‘re1234567RER’; 
ALTER ROLE

密码更换周期注意事项 

alter role rep VALID UNTIL ‘2013-12-18 00:09:07.549152’; 
digoal=> \du+ rep 
List of roles 
Role name | Attributes | Member of | Description 
———–+—————————————————-+———–+————- 
rep | Replication +| {} | 
| 32 connections +| | 
| Password valid until 2013-12-18 00:09:07.549152+08 | | 
密码到期后, 将无法认证通过 
pg93@db-172-16-3-150-> psql -h 172.16.3.150 -U rep digoal 
Password for user rep: 
psql: FATAL: password authentication failed for user “rep”

TYPE DATABASE USER ADDRESS METHOD 
认证类型(pg_hba.conf - TYPE) 
local 本地unix socket, host, hostssl, hostnossl ; (host支持hostssl和hostnossl两种模式), ssl表示网络传输的数据使用加密方式传输, 
包括认证过程也加密. 
认证方法(pg_hba.conf - METHOD) 逐条匹配, 如果匹配到了则不需要往下匹配了. 
trust – 无需密码 
reject – 拒绝认证 
md5 – 校验过程密码加密传输, 但是其他数据是否加密传输要看配置的认证类型是否为SSL. 
password – 校验过度密码明文传输, 如果认证类型为SSL, 则同样会被加密. 
gss – 使用GSSAPI认证方法, 仅支持TCP/IP连接 
sspi – 使用SSPI认证方法, 仅支持windows 
krb5 – 使用Kerberos V5 认证方法,仅支持TCP/IP连接 
ident – 客户端操作系统用户和数据库用户映射关系认证, 仅支持tcp/ip连接 
peer – 客户端操作系统用户和数据库用户映射关系认证, 仅支持unix socket连接 
ldap – 使用LDAP服务认证 
radius – 使用radius服务认证 
cert – 使用客户端的ssl身份认证. 
pam –使用操作系统的PAM认证模块进行认证.

密码方式认证过程的安全注意事项 
在没有使用ssl连接类型的情况下, 不要使用password认证方法, 因为这种方法会传输明文密码, 可能被截获. 
密码认证的方式请使用md5 
密码方式认证如何防范暴力破解和类DDOS攻击 
对于输错密码的情况, 延迟反馈给用户密码错误的消息. 这样可以防止暴力破解和类DDoS攻击.

postgresql.conf

shared_preload_libraries = ‘auth_delay’ 
auth_delay.milliseconds = ‘500’ 
postgresql的鉴权. 
使用最小权限范围鉴权, 尽量避免使用all, 0.0.0.0/0这种大范围授权

这篇文章分享之前我还是要推荐下我自己的JAVA裙:,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2018最新JAVA资料和零基础入门教程!,欢迎初学和进阶中的小伙伴扫下方来一起交流

 

posted @ 2018-01-17 16:41  旧港  阅读(738)  评论(0)    收藏  举报