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

PostgreSQL只读用户权限配置问题:无法使用INTERVAL类型

PostgreSQL只读用户INTERVAL权限矛盾解决方案

问题原因

使用INTERVAL关键字时,PostgreSQL需要访问pg_catalog中的系统对象(比如pg_type表中的INTERVAL类型定义)来解析该类型,但你之前的权限配置完全禁止了用户访问pg_catalog,导致权限报错。核心需求是允许用户使用内置类型,同时禁止其遍历/查询元数据。

解决方案步骤

  1. 确认基础只读权限配置
    确保用户已拥有指定表的只读权限,且已收回pg_catalog和information_schema的全局访问权限:

    -- 创建只读用户(如果未创建)
    CREATE ROLE readonly_user WITH LOGIN PASSWORD 'secure_password';
    -- 授予指定表的SELECT权限
    GRANT SELECT ON your_target_schema.your_target_table TO readonly_user;
    -- 收回pg_catalog和information_schema的全局权限
    REVOKE ALL ON SCHEMA pg_catalog FROM readonly_user;
    REVOKE ALL ON SCHEMA information_schema FROM readonly_user;
    
  2. 授予仅必要的内置类型权限
    单独授予用户INTERVAL类型的USAGE权限,无需开放整个pg_catalog的访问:

    GRANT USAGE ON TYPE pg_catalog.interval TO readonly_user;
    

    如果你的查询还涉及其他内置类型(如timestamp、numeric等),可按需添加对应授权:

    -- 示例:添加timestamp类型权限
    GRANT USAGE ON TYPE pg_catalog.timestamp TO readonly_user;
    

验证效果

  • 执行含INTERVAL的查询,应正常返回结果:
    SELECT id, created_at + INTERVAL '7 days' AS expiry_date FROM your_target_schema.your_target_table LIMIT 5;
    
  • 尝试查询元数据,应返回权限错误(符合预期):
    -- 此查询应报错:permission denied for schema pg_catalog
    SELECT * FROM pg_catalog.pg_type;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:04:55