开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2370人左右 1 + 2 + 3 + 4 +5 + 6 + 7)(1 2 3 4 5 群均已爆满,6群突破300人)
标题挺吓人,的确也是挺吓人的,我已经吃过几次亏了,被领导"询问"我管辖下的PostgreSQL的自建主机怎么就那么的多的安全问题,看图。
工作中我们DBA 组对PostgreSQL自建的主机,管理还是比较严格的,我们做了如下的工作
1 PostgreSQL的数据库用户的名字应该带有前缀,表明用户的使用目的
2 PostgreSQL的数据库用户的密码必须是8位及以上,且必须是大小写和
3 PostgreSQL的数据库端口号,不能是默认的,这里我们统一数据库端口号 1822
4 PostgreSQL建立后,必须给postgres 取消登录的权限
5 PostgreSQL设置SSL连接方式,对需要使用SSL连接的客户,提供SSL 连接方式
6 PostgreSQL pg_hba.conf 中关键的部分进行设置比 TCP/IP 访问的方式必须是md5
但就算是这样我们海狮得到上面图上的结果,未授权访问--PostgreSQL未授权访问高危风险基线的警告。
估计写到这里,一些PostgreSQL的新手,可能对我们上面的一些安全做法也是不熟悉的,这里统一的说说,最后说说我们折在哪里,让阿里云的安全扫描后,给我们这样的结果。
第一点,不用说管理过数据库的都知道该怎么做
第二点也是一样,但这里提醒不要在密码里面出现一些奇怪的字符比如 /?%&-=+`" 这样的字符。
第三点 在PostgreSQL数据库编译的时候就可以对端口进行非默认5432的端口的编译,或者在PostgreSQL.conf 配置文件中对port 端口号进行修改。
第四点 在建立有效的superuser后,就可以对postgres账号下手,直接取消他的用户登录权限,让那些试图通过Postgres登录数据库进行试探的程序统统的失效。
第五点 稍微有点麻烦大家可以跟着我来进行操作 首先如果没有证书,可以自己生成,但如果是对外的数据库服务器,请根据公司的要求获得互联网可支持的证书。
下图是如何产生证书和KEY
openssl req -new -text -out server.req
openssl rsa -in privkey.pem -out server.key
openssl req -x509 -in server.req -text -key server.key -out server.crt
然后把PostgreSQL的配置文件进行修改,将你的证书和KEY文件写入到对应的配置选项,同时打开SSL选项。
# - SSL -
ssl = on
#ssl_ca_file = ''
ssl_cert_file = 'server.crt'
#ssl_crl_file = ''
#ssl_crl_dir = ''
ssl_key_file = 'server.key'
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
#ssl_prefer_server_ciphers = on
最后调节 pg_hba.conf 修改
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
hostssl all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
然后就是pg_ctl -D /pgdata/data reload 将配置加载到PostgreSQL中。
postgres@pg16:~$
postgres@pg16:~$ psql -h 192.168.198.120 -p 5432 -U admin sslmode=require
Password for user admin:
psql (16.0)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=#
此时我已经做到这个程度,还是得到了阿里云的安全警告,并且是最高级的,我此时已经气疯了,阿里云你有毛病吧!!!!!!!!
不过此时明眼的人,已经发现了我的问题
对
local all all trust
只要把这条也改成 md5 则阿里云的安全扫描就不会在出现严重的数据库安全问题的警告,所以最让我生气的是,这么简单的问题,我忽略了还让阿里的安全扫描发现了问题。
写到这里,相信大家对于PostgreSQL数据库自建的安全方面的一些知识有一些新的认知,同时阿里云的安全扫描还是可以发现问题,不信你自建一个PostgreSQL试试 !!!
置顶文章:
PostgreSQL 13.0-13.15 功能更新和bug fixed列表
撕逼!PostgreSQL 和 MongoDB 开撕,MySQL却躺枪
PostgreSQL 哪些版本尽量避免使用,版本更新重点明晰(PG12)
PostgreSQL 15 16 小版本更新信息小结 版本更新是不是挤牙膏
PostgreSQL 14 小版本分析,有那个版本不建议使用
Windows 是MySQL和PostgreSQL高性能数据库的坟墓
往期热门文章:
不带你China玩 ! 来自Oracle 9月9日的 CouldWorld 2024 最后一条新闻
PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话