PostgreSQL数据库安全加固(十一)——定义角色并发会话数

た 入场券 2024-03-26 13:08 176阅读 0赞

文章目录

  • 前言
  • 一、检查配置
  • 二、加固建议
  • 总结

前言

数据库管理包括使用PostgreSQL控制用户数和用户会话数的能力。与PostgreSQL无限制的并发连接可以通过耗尽连接资源来成功进行拒绝服务(DoS)攻击,并且系统也可能因合法用户的过载而失败。因此,限制每个用户的并发会话数有助于降低这些风险。

一、检查配置

1、检查数据库允许的连接总数,请以数据库管理员身份运行以下SQL:

  1. # 切换至postgres数据库
  2. su - postgres
  3. # 查看postgresql.conf配置的最大连接数
  4. psql -c 'SHOW max_connections;'

在这里插入图片描述
2、要检查每个角色允许的连接数量,请以数据库管理员身份运行以下SQL:

  1. # 切换至postgres数据库
  2. su - postgres
  3. # 查看pg_authid系统表信息
  4. psql -c 'SELECT rolname, rolconnlimit from pg_authid'

如果任何角色配置的连接数为-1(不限制),则存在安全风险。
在这里插入图片描述
pg_authid系统表字段说明:

  1. oid:行标识符(隐藏属性; 必须明确选择)
  2. rolname:角色名称
  3. rolsuper:角色拥有超级用户权限
  4. rolinherit:角色自动继承其所属角色的权限
  5. rolcreaterole:角色可以创建更多角色
  6. rolcreatedb:角色可以创建数据库
  7. rolcatupdate:角色可以直接更新系统表。如果没有设置这个字段为真,即使超级用户也不能这么做。
  8. rolcanlogin:角色可以登录,也就是说,这个角色可以给予会话认证标识符。
  9. rolreplication:角色是一个复制的角色。
  10. rolconnlimit:对于可以登录的角色,限制其最大并发连接数量。-1 表示没有限制。
  11. rolpassword:口令(可能是加密的);如果没有则为 NULL。如果密码是加密的,该字段将以md5 字符串开始,后面跟着一个32字符的十六进制MD5哈希值。
  12. rolvaliduntil:口令失效时间(只用于口令认证);如果没有失效期,则为 null

二、加固建议

1、配合合适的最大连接数
要配置允许数据库的最大连接数,以数据库管理员(此处显示为“postgres”)身份,请在postgresql.conf中更改,以下内容(值200是示例;设置值以适合业务需要):

  1. # 切换至postgres数据库
  2. su - postgres
  3. # 膝盖配置文件
  4. vi ${PGDATA?}/postgresql.conf

在这里插入图片描述

修改配置后需要重启或重新加载配置文件。

  1. # 重启数据库
  2. pg_ctl restart
  3. # 重新加载配置文件
  4. pg_ctl reload

2、限制角色允许的最大连接数
要限制特定角色允许的连接数,请以数据库管理员身份运行以下SQL:

  1. psql -cALTER ROLE <rolname> CONNECTION LIMIT 10”;

如下图,admin1角色(账户)被修改为最大并发数为10.

在这里插入图片描述

总结

必须在PostgreSQL中配置或添加限制每个用户的并发会话数的功能(例如,通过使用登录触发器)。请注意,仅通过Web服务器或应用程序服务器限制会话是不够的,因为合法用户和攻击者可能通过其他方式连接到PostgreSQL。

发表评论

表情:
评论列表 (有 0 条评论,176人围观)

还没有评论,来说两句吧...

相关阅读