如何从应用中访问Supabase Vault密钥?RPC函数还是PostgREST API?
从Supabase Vault查询密钥的正确方法
核心结论
你不能直接通过PostgREST API查询Supabase Vault中的密钥,必须创建自定义RPC(存储过程)函数来安全访问密钥。
具体操作步骤
创建RPC函数
在Supabase SQL编辑器中执行以下代码,封装对Vault密钥的访问:CREATE OR REPLACE FUNCTION get_vault_secret(secret_name text) RETURNS text AS $$ BEGIN RETURN vault.get_secret(secret_name); END; $$ LANGUAGE plpgsql SECURITY DEFINER; -- 给应用用户角色赋予执行权限,根据实际情况调整角色名 GRANT EXECUTE ON FUNCTION get_vault_secret(text) TO authenticated;SECURITY DEFINER确保函数以定义者权限执行,具备访问Vault密钥的权限- 避免给匿名角色(
anon)开放敏感密钥的访问权限
通过Supabase客户端调用RPC函数
使用Supabase官方客户端的rpc方法调用该函数:const { data, error } = await supabase.rpc('get_vault_secret', { secret_name: '你的密钥名称' }); if (error) { console.error('获取密钥失败:', error); } else { console.log('密钥值:', data); }
为什么无法直接用PostgREST?
Supabase Vault的vault.get_secret是数据库内部函数,没有暴露给PostgREST的表/视图接口,PostgREST无法直接调用这类底层函数,必须通过自定义RPC函数做一层封装才能安全访问。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

