Skip to content

Commit 1436451

Browse files
committed
fix: update migration to support vault 0.2.8 and above
1 parent 6ae2c3b commit 1436451

File tree

3 files changed

+66
-45
lines changed

3 files changed

+66
-45
lines changed

migrations/db/migrations/20221207154255_create_pgsodium_and_vault.sql

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,44 @@ DECLARE
55
pgsodium_exists boolean;
66
vault_exists boolean;
77
BEGIN
8-
pgsodium_exists = (
9-
select count(*) = 1
10-
from pg_available_extensions
11-
where name = 'pgsodium'
12-
and default_version in ('3.1.6', '3.1.7', '3.1.8', '3.1.9')
13-
);
14-
15-
vault_exists = (
8+
IF EXISTS (SELECT FROM pg_available_extensions WHERE name = 'supabase_vault' AND default_version != '0.2.8') THEN
9+
CREATE EXTENSION IF NOT EXISTS supabase_vault;
10+
11+
-- for some reason extension custom scripts aren't run during AMI build, so
12+
-- we manually run it here
13+
GRANT USAGE ON SCHEMA vault TO postgres WITH GRANT OPTION;
14+
GRANT SELECT, DELETE ON vault.secrets, vault.decrypted_secrets TO postgres WITH GRANT OPTION;
15+
GRANT EXECUTE ON FUNCTION vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt TO postgres WITH GRANT OPTION;
16+
ELSE
17+
pgsodium_exists = (
1618
select count(*) = 1
1719
from pg_available_extensions
18-
where name = 'supabase_vault'
19-
);
20-
21-
IF pgsodium_exists
22-
THEN
23-
create extension if not exists pgsodium;
24-
25-
grant pgsodium_keyiduser to postgres with admin option;
26-
grant pgsodium_keyholder to postgres with admin option;
27-
grant pgsodium_keymaker to postgres with admin option;
28-
29-
grant execute on function pgsodium.crypto_aead_det_decrypt(bytea, bytea, uuid, bytea) to service_role;
30-
grant execute on function pgsodium.crypto_aead_det_encrypt(bytea, bytea, uuid, bytea) to service_role;
31-
grant execute on function pgsodium.crypto_aead_det_keygen to service_role;
32-
33-
IF vault_exists
20+
where name = 'pgsodium'
21+
and default_version in ('3.1.6', '3.1.7', '3.1.8', '3.1.9')
22+
);
23+
24+
vault_exists = (
25+
select count(*) = 1
26+
from pg_available_extensions
27+
where name = 'supabase_vault'
28+
);
29+
30+
IF pgsodium_exists
3431
THEN
35-
create extension if not exists supabase_vault;
32+
create extension if not exists pgsodium;
33+
34+
grant pgsodium_keyiduser to postgres with admin option;
35+
grant pgsodium_keyholder to postgres with admin option;
36+
grant pgsodium_keymaker to postgres with admin option;
37+
38+
grant execute on function pgsodium.crypto_aead_det_decrypt(bytea, bytea, uuid, bytea) to service_role;
39+
grant execute on function pgsodium.crypto_aead_det_encrypt(bytea, bytea, uuid, bytea) to service_role;
40+
grant execute on function pgsodium.crypto_aead_det_keygen to service_role;
41+
42+
IF vault_exists
43+
THEN
44+
create extension if not exists supabase_vault;
45+
END IF;
3646
END IF;
3747
END IF;
3848
END $$;

migrations/db/migrations/20230529180330_alter_api_roles_for_inherit.sql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ ALTER ROLE authenticated inherit;
44
ALTER ROLE anon inherit;
55
ALTER ROLE service_role inherit;
66

7-
GRANT pgsodium_keyholder to service_role;
7+
DO $$
8+
BEGIN
9+
IF EXISTS (SELECT FROM pg_roles WHERE rolname = 'pgsodium_keyholder') THEN
10+
GRANT pgsodium_keyholder to service_role;
11+
END IF;
12+
END $$;
813

914
-- migrate:down
1015

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,31 @@
11
-- migrate:up
2-
CREATE OR REPLACE FUNCTION pgsodium.mask_role(masked_role regrole, source_name text, view_name text)
3-
RETURNS void
4-
LANGUAGE plpgsql
5-
SECURITY DEFINER
6-
SET search_path TO ''
7-
AS $function$
2+
3+
DO $$
84
BEGIN
9-
EXECUTE format(
10-
'GRANT SELECT ON pgsodium.key TO %s',
11-
masked_role);
5+
IF EXISTS (SELECT FROM pg_extension WHERE extname = 'pgsodium') THEN
6+
CREATE OR REPLACE FUNCTION pgsodium.mask_role(masked_role regrole, source_name text, view_name text)
7+
RETURNS void
8+
LANGUAGE plpgsql
9+
SECURITY DEFINER
10+
SET search_path TO ''
11+
AS $function$
12+
BEGIN
13+
EXECUTE format(
14+
'GRANT SELECT ON pgsodium.key TO %s',
15+
masked_role);
1216

13-
EXECUTE format(
14-
'GRANT pgsodium_keyiduser, pgsodium_keyholder TO %s',
15-
masked_role);
17+
EXECUTE format(
18+
'GRANT pgsodium_keyiduser, pgsodium_keyholder TO %s',
19+
masked_role);
1620

17-
EXECUTE format(
18-
'GRANT ALL ON %I TO %s',
19-
view_name,
20-
masked_role);
21-
RETURN;
22-
END
23-
$function$;
21+
EXECUTE format(
22+
'GRANT ALL ON %I TO %s',
23+
view_name,
24+
masked_role);
25+
RETURN;
26+
END
27+
$function$;
28+
END IF;
29+
END $$;
2430

2531
-- migrate:down

0 commit comments

Comments
 (0)