rds for postgresql安全最佳实践-九游平台
postgresql数据库在可靠性、稳定性、数据一致性等获得了业内极高的声誉,已成为许多企业的首选开源关系数据库,业界简称pg。rds for postgresql是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线云数据库服务。
为加强rds for postgresql数据库安全性,本文将从以下几个维度给出建议,您可以根据业务需要在本指导的基础上进行安全配置。
- 配置数据库的最大连接数
- 配置客户端认证超时时间
- 配置ssl连接和加密算法
- 配置密码加密功能
- 配置服务器拒绝带反斜杠转义的引号
- 定期检查并删除业务不再使用的角色
- 建议回收public模式的所有权限
- 设置合理的用户角色密码有效期
- 配置日志级别记录发生错误的sql语句
- 确保数据库账号的最低权限
- 开启备份功能
- 开启数据库审计功能
- 避免绑定eip直接通过公网访问rds for postgresql
- 数据库版本更新到最新版本
- 配置账号认证失败延迟时间
配置数据库的最大连接数
max_connections 决定了数据库的最大并发连接数。增加这个参数值可能引起rds for postgresql请求更多的system v共享内存或者信号量,会导致超出操作系统默认配置允许的值。请根据业务的复杂度,合理配置max_connections,具体可参考。
配置客户端认证超时时间
authentication_timeout控制完成客户端认证的时间上限,单位是秒。该参数可以防止客户端长时间占用连接通道,默认是60s。如果在指定的时间内没有完成认证,连接将被强制关闭。该超时时间的配置是为了增强postgresql的安全性。
配置ssl连接和加密算法
尽可能利用ssl进行tcp/ip连接,使用ssl加密通信可确保客户端和服务器之间的所有通信都经过加密,防止数据被泄露和篡改,确保数据的完整性。在设置ssl加密时,服务端需要配置安全的tls协议和加密算法,推荐使用tlsv1.2协议,加密算法推荐使用eecdh ecdsa aesgcm:eecdh arsa aesgcm:edh arsa aesgcm:edh adss aesgcm:!anull:!enull:!low:!3des:!md5:!exp:!srp:!rc4,具体请参考ssl连接。
可通过修改参数“ssl_min_protocol_version”配置tls协议,修改参数“ssl_ciphers”配置加密算法。
配置密码加密功能
密码必须要加密。使用create user或者alter role修改密码时候,默认使用加密的方式,推荐使用scram-sha-256,可通过修改参数“password_encryption”进行配置。
md5选项仅供与低版本兼容场景使用,新建数据库实例默认使用scram-sha-256。

参数“password_encryption”修改后需要重置密码后才能生效。
配置服务器拒绝带反斜杠转义的引号
参数“backslash_quote”控制字符串里面引号是否可以被\'代替。推荐使用sql标准方法,表示一个引号是写两遍 (''),如果客户端代码不能正确的转义,可能发生sql注入攻击。建议配置参数“backslash_quote”值为“safe_encoding”,拒绝带反斜杠转义的引号的查询,可以避免sql注入的风险。
定期检查并删除业务不再使用的角色
对于每个查询出来的角色,检查是否必须存在,任何未知的角色都需要被审视,确保每个角色都是正常使用的,否则删除这些角色。可通过如下命令进行查询:
select rolname from pg_roles;
建议回收public模式的所有权限
public模式是默认的模式,所有用户都可以访问其中的对象,包括表、函数、视图等。如果public模式中的对象被授予了权限,那么所有用户都可以访问这些对象,这可能会导致安全漏洞。root用户可通过如下命令回收权限:
revoke all on schema public from public;
设置合理的用户角色密码有效期
当创建角色时候,使用关键字设置过多长时间后角色的密码不再有效。如果这个关键字被忽略,密码会长期有效。建议定期更改密码,例如每三个月更改一次密码。可通过如下命令进行设置:
create role name with password 'password' valid until 'timestamp';
检查是否设置密码有效期:
select rolname,rolvaliduntil from pg\_roles where rolsuper = false and rolvaliduntil is null;
配置日志级别记录发生错误的sql语句
参数“log_min_error_statement”控制哪些引起错误的sql语句记录到服务器日志中。对于大于等于当前配置等级的sql语句消息,会记录到日志里。有效的值包括debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal, panic。“log_min_error_statement”至少配置为“error”,具体可参考。
确保数据库账号的最低权限
rds for postgresql支持“基于角色”的方法授予账号对数据和命令的访问权限。建议管理员结合业务需要,遵从最低授权原则,创建合适的,对账号进行授权。如果发现存在不符合该角色的账号权限,请结合业务需要,对账号权限进行更新或者。由于postgresql存在一些,用于给数据库实例提供完善的后台运维管理服务,禁止用户使用和删除。
开启备份功能
创建云数据库rds实例时,系统默认开启自动备份策略,默认自动备份保留7天,可根据业务需要调整备份保留时长。rds for postgresql实例支持和,您可以定期对数据库进行备份,当数据库故障或数据损坏时,可以通过备份文件恢复数据库,从而保证数据可靠性,详情请参见。
开启数据库审计功能
通过将postgresql审计扩展(pgaudit)与rds for postgresql数据库实例一起使用,可以捕获审计员通常需要或满足法规要求的详细记录。例如,您可以设置pgaudit扩展来跟踪对特定数据库和表所做的更改、记录进行更改的用户以及许多其他详细信息。pgaudit默认不开启,根据业务需要开启插件。具体配置可参考。
避免绑定eip直接通过公网访问rds for postgresql
避免rds for postgresql部署在公网或者dmz里,应该将rds for postgresql部署在华为云内部网络,使用路由器或者防火墙技术把rds for postgresql保护起来,避免直接绑定eip方式从公网访问rds for postgresql。通过这种方式防止未授权的访问及ddos攻击等。建议解绑弹性公网ip,如果您的业务必须绑定eip,请务必通过设置安全组规则限制访问数据库的源ip。
数据库版本更新到最新版本
postgresql社区当前9.5/9.6/10版本已经eol,社区已不再维护,云上9.5/9.6版本已经发布。使用较老的版本可能存在安全风险,运行最新版本的软件可以避免受到某些攻击。如果业务需要,可通过或者。
配置账号认证失败延迟时间
postgresql数据库默认内置了auth_delay插件,auth_delay会使服务器在返回认证失败之前短暂停止,使得暴力破解数据库密码更难。可通过设置auth_delay.milliseconds参数(该参数为返回认证失败之前等待的毫秒数)延迟账号登录认证失败的等待时间,缺省值是0。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨