PostgreSQL撤销数据库全部权限后用户仍可创建表的问题求助
PostgreSQL权限排查:用户仍可创建表的原因及解决办法
你遇到的问题核心是权限层级没覆盖到:只控制了数据库级的CONNECT权限,但创建表属于schema级(默认是public schema)的操作权限,具体原因如下:
- 默认情况下,
public组对数据库内的publicschema拥有CREATE和USAGE权限,而新创建的用户默认会加入public组,所以即使你撤销了public组对数据库的权限,schema级的权限依然生效,导致NoxUser能在publicschema下创建表。
排查验证
执行以下SQL查看public schema的权限配置:
SELECT nspname, pg_get_userbyid(nspowner) AS owner, array_to_string(nspacl, E'\n') AS privileges FROM pg_namespace WHERE nspname = 'public';
如果结果里包含=UC/postgres或者public=UC/postgres,说明public组确实拥有该schema的CREATE(C)和USAGE(U)权限。
解决步骤
- 撤销
public组对publicschema的CREATE权限:
REVOKE CREATE ON SCHEMA public FROM public;
- 若需要彻底禁止用户访问
publicschema(包括查看现有表),可同时撤销USAGE权限:
REVOKE USAGE ON SCHEMA public FROM public;
- 确认NoxUser没有单独被授予schema权限:
SELECT * FROM information_schema.schema_privileges WHERE grantee = 'NoxUser';
执行完以上操作后,NoxUser仅能连接数据库,无法创建任何对象。
内容的提问来源于stack exchange,提问作者Begüm Nur Kadem
相关产品推荐
相关产品推荐

