You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL撤销数据库全部权限后用户仍可创建表的问题求助

PostgreSQL权限排查:用户仍可创建表的原因及解决办法

你遇到的问题核心是权限层级没覆盖到:只控制了数据库级的CONNECT权限,但创建表属于schema级(默认是public schema)的操作权限,具体原因如下:

  • 默认情况下,public组对数据库内的public schema拥有CREATE和USAGE权限,而新创建的用户默认会加入public组,所以即使你撤销了public组对数据库的权限,schema级的权限依然生效,导致NoxUser能在public schema下创建表。

排查验证

执行以下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)权限。

解决步骤

  1. 撤销public组对public schema的CREATE权限:
REVOKE CREATE ON SCHEMA public FROM public;
  1. 若需要彻底禁止用户访问public schema(包括查看现有表),可同时撤销USAGE权限:
REVOKE USAGE ON SCHEMA public FROM public;
  1. 确认NoxUser没有单独被授予schema权限:
SELECT * FROM information_schema.schema_privileges WHERE grantee = 'NoxUser';

执行完以上操作后,NoxUser仅能连接数据库,无法创建任何对象。

内容的提问来源于stack exchange,提问作者Begüm Nur Kadem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:59:58