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

Supabase无法删除用户:权限错误排查求助

问题分析

创建用户时触发器能正常同步public.user表,但执行auth.admin.deleteUser时触发权限错误,核心原因是删除用户时,执行同步触发器的角色(auth角色)没有操作public schema的权限。

创建用户时能成功,大概率是因为创建流程中触发器的执行上下文有更高权限,而删除时切换到了auth角色,导致权限不足。

解决方案

方案1:修改触发器函数为SECURITY DEFINER(推荐)

如果你的同步逻辑是通过自定义函数实现的,确保函数设置了SECURITY DEFINER,并且函数所有者是拥有public schema权限的角色(比如supabase_admin):

-- 假设你的同步函数名为sync_public_user
ALTER FUNCTION sync_public_user() SECURITY DEFINER;
ALTER FUNCTION sync_public_user() OWNER TO supabase_admin;
-- 可选:限制函数调用权限,仅允许auth角色触发
REVOKE ALL ON FUNCTION sync_public_user() FROM PUBLIC;
GRANT EXECUTE ON FUNCTION sync_public_user() TO auth;

这样触发器执行时会以函数所有者的权限运行,避免auth角色直接操作public schema的权限问题。

方案2:给auth角色授予public.user表的删除权限

如果不想用SECURITY DEFINER,直接给auth角色授予public.user表的删除权限:

GRANT DELETE ON public.user TO auth;

但这种方式安全性较低,不推荐在生产环境使用。

验证步骤
  1. 执行上述SQL后,重新调用supabaseAdminClient.auth.admin.deleteUser(id)
  2. 检查auth.users和public.user表是否都成功删除目标用户
  3. 查看日志确认权限错误是否消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:04:56