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;
但这种方式安全性较低,不推荐在生产环境使用。
验证步骤
- 执行上述SQL后,重新调用
supabaseAdminClient.auth.admin.deleteUser(id) - 检查
auth.users和public.user表是否都成功删除目标用户 - 查看日志确认权限错误是否消失
内容的提问来源于stack exchange,提问作者StackMyFlow
相关产品推荐
相关产品推荐

