Skip to content

Commit dd71c27

Browse files
committed
Address review comments
1 parent e965ad2 commit dd71c27

File tree

6 files changed

+25
-11
lines changed

6 files changed

+25
-11
lines changed

contrib/pg_tde/expected/access_control.out

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ SET ROLE regress_pg_tde_access_control;
1010
-- should throw access denied
1111
SELECT pg_tde_set_key_using_database_key_provider('test-db-key', 'local-file-provider');
1212
ERROR: permission denied for function pg_tde_set_key_using_database_key_provider
13+
SELECT pg_tde_delete_key();
14+
ERROR: permission denied for function pg_tde_delete_key
1315
SELECT pg_tde_list_all_database_key_providers();
1416
ERROR: permission denied for function pg_tde_list_all_database_key_providers
1517
SELECT pg_tde_list_all_global_key_providers();
@@ -37,6 +39,7 @@ GRANT EXECUTE ON FUNCTION pg_tde_delete_global_key_provider(TEXT) TO regress_pg_
3739
GRANT EXECUTE ON FUNCTION pg_tde_set_default_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3840
GRANT EXECUTE ON FUNCTION pg_tde_set_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3941
GRANT EXECUTE ON FUNCTION pg_tde_set_server_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
42+
GRANT EXECUTE ON FUNCTION pg_tde_delete_default_key() TO regress_pg_tde_access_control;
4043
SET ROLE regress_pg_tde_access_control;
4144
SELECT pg_tde_add_database_key_provider_file('local-file-provider', '/tmp/pg_tde_test_keyring.per');
4245
ERROR: must be superuser to modify key providers
@@ -56,5 +59,7 @@ SELECT pg_tde_set_default_key_using_global_key_provider('key1', 'global-file-pro
5659
ERROR: must be superuser to access global key providers
5760
SELECT pg_tde_set_server_key_using_global_key_provider('key1', 'global-file-provider');
5861
ERROR: must be superuser to access global key providers
62+
SELECT pg_tde_delete_default_key();
63+
ERROR: must be superuser to access global key providers
5964
RESET ROLE;
6065
DROP EXTENSION pg_tde CASCADE;

contrib/pg_tde/pg_tde--1.0-rc.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,13 @@ CREATE FUNCTION pg_tde_delete_key()
263263
RETURNS VOID
264264
LANGUAGE C
265265
AS 'MODULE_PATHNAME';
266+
REVOKE ALL ON FUNCTION pg_tde_delete_key() FROM PUBLIC;
266267

267268
CREATE FUNCTION pg_tde_delete_default_key()
268269
RETURNS VOID
269270
LANGUAGE C
270271
AS 'MODULE_PATHNAME';
272+
REVOKE ALL ON FUNCTION pg_tde_delete_default_key() FROM PUBLIC;
271273

272274
CREATE FUNCTION pg_tde_key_info()
273275
RETURNS TABLE ( key_name TEXT,

contrib/pg_tde/sql/access_control.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ SET ROLE regress_pg_tde_access_control;
88

99
-- should throw access denied
1010
SELECT pg_tde_set_key_using_database_key_provider('test-db-key', 'local-file-provider');
11+
SELECT pg_tde_delete_key();
1112
SELECT pg_tde_list_all_database_key_providers();
1213
SELECT pg_tde_list_all_global_key_providers();
1314
SELECT pg_tde_key_info();
@@ -29,6 +30,7 @@ GRANT EXECUTE ON FUNCTION pg_tde_delete_global_key_provider(TEXT) TO regress_pg_
2930
GRANT EXECUTE ON FUNCTION pg_tde_set_default_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3031
GRANT EXECUTE ON FUNCTION pg_tde_set_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3132
GRANT EXECUTE ON FUNCTION pg_tde_set_server_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
33+
GRANT EXECUTE ON FUNCTION pg_tde_delete_default_key() TO regress_pg_tde_access_control;
3234

3335
SET ROLE regress_pg_tde_access_control;
3436

@@ -41,6 +43,7 @@ SELECT pg_tde_delete_global_key_provider('global-file-provider');
4143
SELECT pg_tde_set_key_using_global_key_provider('key1', 'global-file-provider');
4244
SELECT pg_tde_set_default_key_using_global_key_provider('key1', 'global-file-provider');
4345
SELECT pg_tde_set_server_key_using_global_key_provider('key1', 'global-file-provider');
46+
SELECT pg_tde_delete_default_key();
4447

4548
RESET ROLE;
4649

contrib/pg_tde/src/access/pg_tde_tdemap.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -515,19 +515,16 @@ pg_tde_delete_principal_key_redo(Oid dbOid)
515515
{
516516
char path[MAXPGPATH];
517517

518-
LWLockAcquire(tde_lwlock_enc_keys(), LW_EXCLUSIVE);
519-
520518
pg_tde_set_db_file_path(dbOid, path);
521-
durable_unlink(path, WARNING);
522519

520+
LWLockAcquire(tde_lwlock_enc_keys(), LW_EXCLUSIVE);
521+
durable_unlink(path, WARNING);
523522
LWLockRelease(tde_lwlock_enc_keys());
524523
}
525524

526525
/*
527526
* Deletes the principal key for the database. This fucntion checks if key map
528527
* file has any entries, and if not, it removes the file. Otherwise raises an error.
529-
*
530-
* The caller must hold an exclusive lock on the files before calling this function.
531528
*/
532529
void
533530
pg_tde_delete_principal_key(Oid dbOid)
@@ -686,8 +683,6 @@ pg_tde_find_map_entry(const RelFileLocator *rlocator, TDEMapEntryType key_type,
686683
* positive is more harmful this might not be.
687684
*
688685
* Works even if the database has no map file.
689-
* The caller must hold a shared or exclusive lock on the
690-
* tde_lwlock_enc_keys() lock.
691686
*/
692687
int
693688
pg_tde_count_relations(Oid dbOid)

contrib/pg_tde/src/catalog/tde_principal_key.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,8 @@ pg_tde_delete_key(PG_FUNCTION_ARGS)
602602
if (principal_key == NULL)
603603
ereport(ERROR, errmsg("principal key does not exists for the database"));
604604

605+
ereport(LOG, errmsg("Deleting principal key [%s] for the database", principal_key->keyInfo.name));
606+
605607
/*
606608
* If database has something encryted, we can try to fallback to the
607609
* default principal key
@@ -656,12 +658,19 @@ pg_tde_delete_default_key(PG_FUNCTION_ARGS)
656658
TDEPrincipalKey *default_principal_key;
657659
List *dbs = NIL;
658660

661+
if (!superuser())
662+
ereport(ERROR,
663+
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
664+
errmsg("must be superuser to access global key providers"));
665+
659666
LWLockAcquire(tde_lwlock_enc_keys(), LW_EXCLUSIVE);
660667

661668
default_principal_key = GetPrincipalKeyNoDefault(DEFAULT_DATA_TDE_OID, LW_EXCLUSIVE);
662669
if (default_principal_key == NULL)
663670
ereport(ERROR, errmsg("default principal key is not set"));
664671

672+
ereport(LOG, errmsg("Deleting default principal key [%s]", default_principal_key->keyInfo.name));
673+
665674
/*
666675
* Take row exclusive lock, as we do not want anybody to create/drop a
667676
* database in parallel. If it happens, its not the end of the world, but
@@ -705,7 +714,6 @@ pg_tde_delete_default_key(PG_FUNCTION_ARGS)
705714
pg_tde_delete_principal_key(dbOid);
706715
clear_principal_key_cache(dbOid);
707716
}
708-
list_free(dbs);
709717

710718
systable_endscan(scan);
711719
table_close(rel, RowExclusiveLock);
@@ -715,6 +723,9 @@ pg_tde_delete_default_key(PG_FUNCTION_ARGS)
715723
clear_principal_key_cache(DEFAULT_DATA_TDE_OID);
716724

717725
LWLockRelease(tde_lwlock_enc_keys());
726+
727+
list_free(dbs);
728+
718729
PG_RETURN_VOID();
719730
}
720731

contrib/pg_tde/t/expected/basic.out

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@ CREATE EXTENSION IF NOT EXISTS pg_tde;
1212
ORDER BY pg_proc.oid::regprocedure::text;
1313
oid
1414
-------------------------------
15-
pg_tde_delete_default_key()
16-
pg_tde_delete_key()
1715
pg_tde_is_encrypted(regclass)
1816
pg_tde_version()
19-
(4 rows)
17+
(2 rows)
2018

2119

2220
SELECT extname, extversion FROM pg_extension WHERE extname = 'pg_tde';

0 commit comments

Comments
 (0)