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

Supabase应用内删除用户权限问题求助:触发器执行失败

解决Supabase中用户删除自身账号时的权限问题

你的问题出在触发器函数的执行权限上。默认情况下,触发器会以触发它的用户(也就是前端请求对应的authenticated/anon角色)权限运行,而这些角色没有操作auth.users表的权限,所以抛出了permission denied错误。

解决方法是将触发器函数改为SECURITY DEFINER模式,让它以函数创建者(通常是拥有超级权限的postgres用户)的身份执行,具体操作如下:

  1. 修改触发器函数,添加SECURITY DEFINER属性并设置安全的搜索路径:
CREATE OR REPLACE FUNCTION deleteUser() RETURNS TRIGGER AS $$
BEGIN
    DELETE FROM auth.users WHERE auth.users.id = OLD.user_id;
    RETURN OLD;
END $$ LANGUAGE plpgsql SECURITY DEFINER
SET search_path = public;
  1. 授予所有用户执行该函数的权限:
GRANT EXECUTE ON FUNCTION deleteUser() TO PUBLIC;

修改完成后,当用户删除自己的profiles记录时,触发器会以拥有足够权限的身份执行DELETE FROM auth.users操作,不会再出现权限错误。

注意:使用SECURITY DEFINER时要确保函数逻辑安全,你的函数只删除当前被删除的profiles记录对应的用户ID,不存在越权风险,所以是安全的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:40:28