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

PostgreSQL撤销特定列权限失败,请求可行示例及解决方案

解决PostgreSQL撤销列权限失败的问题

让我来帮你梳理这个撤销列权限失败的问题,先从你提供的权限信息入手分析:

Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+-------+-------+---------------------------+-------------------+----------
public | users | table | himanshu=arwdDxt/himanshu+| |
| | | reports_user=r/himanshu | |
(1 row)

从这个输出能看到两个关键点:

  • reports_user拥有users表的表级SELECT权限(r代表SELECT),权限由himanshu授予;
  • Column privileges列是空的,说明当前没有针对users表的列级别权限授予记录。

这就是你执行revoke select (column1, column2) on table from specific_user没效果的核心原因:没有可撤销的列级权限存在,而且表级的SELECT权限会覆盖任何列级的权限设置——哪怕你之前给过列权限,只要用户还有表级SELECT权限,列级的限制就不会生效。

正确的操作步骤

如果你想限制reports_user只能查询users表的特定列,应该这么做:

  1. 先撤销表级的SELECT权限

    REVOKE SELECT ON public.users FROM reports_user;
    
  2. 再授予允许查询的列权限

    GRANT SELECT (允许查询的列名1, 允许查询的列名2) ON public.users TO reports_user;
    

额外排查建议

如果你确定之前给过列级权限但现在看不到,可以执行下面的SQL来确认列权限的具体情况:

SELECT * FROM information_schema.column_privileges 
WHERE table_name = 'users' AND grantee = 'reports_user';

如果结果为空,说明确实没有列级权限;如果有结果,再针对对应的权限进行撤销操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:28