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

如何限制PostgreSQL只读用户调用pg_sleep函数?

限制PostgreSQL只读用户调用pg_sleep()的方法

这事儿用PostgreSQL原生的权限系统就能轻松搞定,步骤很直接,我给你一步步拆解:

  • 第一步:以超级用户身份登录数据库
    你需要用拥有超级权限的用户(比如默认的postgres用户)连接到目标数据库,只有超级用户才能修改内置系统函数的权限。

  • 第二步:撤销所有用户对pg_sleep的默认执行权限
    PostgreSQL里的pg_sleep有两个重载版本(分别接受integer和double precision类型的参数),得把两个都处理到。执行以下两条命令:

    REVOKE EXECUTE ON FUNCTION pg_sleep(integer) FROM PUBLIC;
    REVOKE EXECUTE ON FUNCTION pg_sleep(double precision) FROM PUBLIC;
    

    这里的PUBLIC代表所有用户,撤销后默认情况下没有用户能调用这个函数了。

  • 第三步:给需要使用pg_sleep的合法用户/角色授权
    如果有其他用户或角色需要正常使用pg_sleep,可以单独给他们授予权限。比如给名为db_admin的角色授权:

    GRANT EXECUTE ON FUNCTION pg_sleep(integer), pg_sleep(double precision) TO db_admin;
    
  • 第四步:验证效果
    切换到你的只读用户,尝试执行SELECT pg_sleep(10);,此时应该会收到类似这样的错误提示:

    ERROR: permission denied for function pg_sleep

额外注意事项

  • 如果你的只读用户继承了某个拥有pg_sleep执行权限的角色,那你需要要么撤销该角色的对应权限,要么修改只读用户的INHERIT属性(执行ALTER ROLE readonly_user NOINHERIT;),避免权限继承导致限制失效。
  • 这个操作是持久化的,除非你重新授权,否则所有后续创建的新用户默认都无法调用pg_sleep。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:31:14