PostgreSQL如何为数据库所有者授予public schema的相关权限
方案可行性验证
你提出的两个替代方案均符合PostgreSQL 13.2的权限设计逻辑,可满足账号严格隔离的需求,具体说明如下:
- 方案1:保留public角色的默认schema权限,仅通过
CONNECT权限管控数据库访问
你之前顾虑的「逻辑不够严谨」问题并不存在。PostgreSQL权限校验为逐层生效规则,CONNECT是数据库级入口权限,只要先撤销public角色的全局CONNECT权限,再仅向对应角色授予其专属数据库的CONNECT权限,其他用户即使持有public schema的权限也无法访问非授权数据库,完全可以实现严格的账号隔离。该方案无需修改模板库配置,对现有业务的影响最小。 - 方案2:从默认模板库移除public schema,由数据库所有者自行创建
该方案完全符合权限最小化原则,用户新建数据库后自行创建的public schema默认所有者为当前角色,自动持有全部权限,无需额外授权操作。仅需对template1库执行一次DROP SCHEMA public;操作即可,所有后续新建的数据库会默认继承该配置,不会影响已创建的存量数据库。
补充可选方案
如果不希望修改全局模板库的默认配置,也可以为该测试角色单独创建专属模板库:
- 超级用户新建专属模板库,删除库内public schema,仅授予该测试角色该模板库的
CONNECT和TEMP权限 - 角色新建数据库时指定专属模板即可:
CREATE DATABASE test_db TEMPLATE custom_test_template;
该方案不会影响其他业务数据库的默认创建逻辑,隔离性更强。
内容的提问来源于stack exchange,提问作者Dave_B.
相关产品推荐
相关产品推荐

