Supabase应用内删除用户权限问题求助:触发器执行失败
解决Supabase中用户删除自身账号时的权限问题
你的问题出在触发器函数的执行权限上。默认情况下,触发器会以触发它的用户(也就是前端请求对应的authenticated/anon角色)权限运行,而这些角色没有操作auth.users表的权限,所以抛出了permission denied错误。
解决方法是将触发器函数改为SECURITY DEFINER模式,让它以函数创建者(通常是拥有超级权限的postgres用户)的身份执行,具体操作如下:
- 修改触发器函数,添加
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;
- 授予所有用户执行该函数的权限:
GRANT EXECUTE ON FUNCTION deleteUser() TO PUBLIC;
修改完成后,当用户删除自己的profiles记录时,触发器会以拥有足够权限的身份执行DELETE FROM auth.users操作,不会再出现权限错误。
注意:使用SECURITY DEFINER时要确保函数逻辑安全,你的函数只删除当前被删除的profiles记录对应的用户ID,不存在越权风险,所以是安全的。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

