我需要使用 Supabase 上的 Postgres 功能为我的用户生成 hmac。我正在运行以下命令,以便在用户请求时在运行时生成它。
create or replace function get_hmac(message text) returns varchar
as $$
SELECT ENCODE(HMAC(message,'mykey','sha256'),'hex');
$$ language sql;
但是,我不确定这是否安全,因为我的密钥(“mykey”)只是放在那里,暴露给任何有权访问我的 sql 编辑器的人。我该如何解决这个问题?
硬编码值从来都不是一个好主意,因为它们变得分散并增加了泄漏的风险。 在 Supabase 中,您应该使用 Vault 来保存您的所有秘密。
首先您应该安装 Vault 扩展
create extension vault with schema vault;
然后将所需的秘密插入到保险库中
insert into vault.secrets
(secret, associated)
values
('s3kr3t_k3y', 'secretAPIkey');
秘密现在已加密存储在保管库中。 要查看解密的数据,您可以使用:
select * from vault.decrypted_secrets;
要使用它,你应该能够编写如下内容:
create or replace function get_hmac(message text) returns varchar
as $$
SELECT ENCODE(HMAC(message,
(SELECT decrypted_secret FROM vault.decrypted_secrets
WHERE associates = 'secretApiKey') as vault,
'sha256'
),'hex');
$$ language sql;
完整的解释可以在 Supabase 博客网站
找到另一种选择是使用环境变量,但我认为Vault是一个更好的解决方案。