我们正在为客户管理 kubernetes 中的数据库。对于每个新集群,我们都会创建一个新用户并CREATE ROLE
为其CREATE DB
赋予角色,以便他们可以创建自己的数据库和具有更严格角色的新用户。
问题是,有了CREATE ROLE
权限,用户可以授予自己pg_execute_server_program
角色,然后使用反向 shell 攻击,然后从我们的 pod 中获取 shell 并读取环境变量,这是不希望的。例如,我们在环境变量中有几个秘密,客户可以利用这些秘密,然后增加他们的攻击范围并接管更多东西。
简而言之,我希望有一个可以创建新用户的用户,但不能授予自己特定的预定义角色。
更新:我查看并发现ADMIN_OPTION
PostgreSQL 16 中已添加该功能来解决此类问题。我的问题是我们使用的是 PostgreSQL 版本 13、14、15,我们不能强制升级所有集群。