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

PostgreSQL:撤销用户表空间创建权限后仍可建表的原因?

问题原因分析

出现这个问题的核心原因是PostgreSQL默认会给public角色授予所有表空间的CREATE权限,你的splunk用户作为public角色的默认成员,会继承这一权限——哪怕你单独撤销了splunk用户在tbs_tab_splunk表空间的CREATE权限,依然能通过public角色的权限在该表空间创建表。

另外需要确认你执行的撤销权限命令是否完整:如果只针对splunk用户撤销,而没有处理public角色的权限,就会出现这种权限仍生效的情况。

验证方法

执行以下命令查看tbs_tab_splunk表空间的权限分配:

SELECT grantee, privilege_type 
FROM information_schema.table_space_privileges 
WHERE table_space_name = 'tbs_tab_splunk';

如果结果中存在grantee = 'public'且privilege_type = 'CREATE',就说明public角色仍拥有该表空间的创建权限。

解决步骤
  1. 撤销public角色在目标表空间的CREATE权限:
REVOKE CREATE ON TABLESPACE tbs_tab_splunk FROM public;
  1. 如果需要给特定用户(比如splunk)开放该表空间的权限,可以单独授予:
GRANT CREATE ON TABLESPACE tbs_tab_splunk TO splunk;

(注:如果不需要splunk使用该表空间,这一步可以跳过)

补充说明

PostgreSQL中,用户创建表需要同时满足两个权限条件:

  • 在目标schema上拥有CREATE权限(默认publicschema的CREATE权限也是授予public角色的,如果需要严格限制,也需要撤销public在该schema的权限)
  • 在目标表空间上拥有CREATE权限

内容的提问来源于stack exchange,提问作者Rajat Sanwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:57:08