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

无法撤销自定义schema中函数的EXECUTE执行权限

问题根本原因

PostgreSQL 内置一个所有角色默认继承的隐式公共角色 PUBLIC,默认新创建的函数都会自动为 PUBLIC 角色授予 EXECUTE 执行权限。你仅撤销了 doctor 角色显式持有的函数权限,但是 doctor 角色继承自 PUBLIC 的执行权限仍然生效,因此还是可以正常调用函数。

修复方案

  1. 先撤销 PUBLIC 角色对目标函数的默认执行权限:
    REVOKE EXECUTE ON FUNCTION app.my_function() FROM PUBLIC;
    
  2. 按需给其他需要调用该函数的角色单独授予执行权限即可,示例如下:
    -- 假设需要给admin角色开放权限
    GRANT EXECUTE ON FUNCTION app.my_function() TO admin;
    

其他排查点

  • 确认撤销权限时的函数签名与实际创建的函数完全匹配,包含参数类型:如果函数实际定义为带参数的 app.my_function(text),你撤销权限时写无参的 app.my_function() 会匹配不到目标函数,权限撤销不会生效。
  • 确认 doctor 角色没有继承其他持有该函数执行权限的角色权限,如果存在继承关系,需要同步撤销对应父角色的权限或者调整角色继承关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:21:02