我在使用SupplyData触发器和函数执行权限时遇到了一个问题。我设置了一个触发器,在插入auth.users
表后触发。该触发器调用一个名为public.handle_new_user()
的函数,该函数执行某些操作,包括将数据插入另一个表public.profiles
。
以下是我所做的总结:
DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users;
CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
BEGIN
RAISE LOG 'Current user: %', current_user;
PERFORM public.insert_into_profiles(
NEW.id,
(NEW.raw_user_meta_data->>'first_name'),
(NEW.raw_user_meta_data->>'last_name')
);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW
EXECUTE FUNCTION public.handle_new_user();
字符串
当我在Supplement Jmeter 板中执行insert_into_profiles()
时,它可以正常工作,因为它是以postgres
用户身份执行的。但是,当在handle_new_user()
函数中调用此函数并通过INSERT
之后的触发器(由supplement_auth_admin触发)调用此函数时,我遇到专门针对public.profiles
表的“permission denied”错误。
对于为什么触发器调用的函数没有所需的权限,特别是当函数本身独立执行时,有什么见解吗?
感谢您的任何帮助或指导!
我已经验证了public.insert_into_profiles
函数在直接执行时可以正常工作:
SELECT public.insert_into_profiles(
'b53e07f1-e775-4a15-b287-8a25d3525bca',
'John',
'Doe'
);
型
此命令执行时没有问题。但是,在handle_new_user()
上下文中,它似乎缺乏必要的权限。
此外,我已经删除了所有行级安全(RLS)策略,错误仍然存在
1条答案
按热度按时间hpcdzsge1#
你必须让你的函数成为一个安全定义者,这样它才有Postgres特权。
字符串