Enforces pgsodium Vault for secret storage accessed only via SECURITY DEFINER functions on service_role.
100
100%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
pgsodium extension MUST be enabled in the target Supabase project.vault schema MUST exist (Supabase enables this by default with pgsodium).execute_sql access via service_role.supabase-mcp-verification tile MUST be installed and passing.SELECT extname FROM pg_extension WHERE extname = 'pgsodium'; — HALT if empty.SELECT count(*) FROM information_schema.tables WHERE table_schema = 'vault' AND table_name = 'secrets'; — HALT if 0.vault.create_secret(new_secret text, new_name text) to store the secret.new_name parameter MUST be a descriptive key (e.g., openai_api_key).id (UUID) for reference in the accessor function.Execute the following as a single SQL block:
CREATE OR REPLACE FUNCTION get_secret(secret_name text)
RETURNS text
LANGUAGE sql
SECURITY DEFINER
AS $$
SELECT decrypted_secret
FROM vault.decrypted_secrets
WHERE name = secret_name
LIMIT 1;
$$;
ALTER FUNCTION get_secret(text) OWNER TO postgres;
REVOKE EXECUTE ON FUNCTION get_secret(text) FROM PUBLIC, anon, authenticated;
GRANT EXECUTE ON FUNCTION get_secret(text) TO service_role;service_role, run SELECT get_secret('openai_api_key'); — MUST return the decrypted value.anon, run SELECT get_secret('openai_api_key'); — MUST return a permission-denied error.vault.secrets (yes/no).SECURITY DEFINER (yes/no).service_role access succeeds (yes/no).anon access denied (yes/no).