Skip to content

Commit 30181c6

Browse files
committed
Address review comments
1 parent b5388fa commit 30181c6

File tree

6 files changed

+22
-11
lines changed

6 files changed

+22
-11
lines changed

contrib/pg_tde/expected/access_control.out

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ GRANT EXECUTE ON FUNCTION pg_tde_delete_global_key_provider(TEXT) TO regress_pg_
3737
GRANT EXECUTE ON FUNCTION pg_tde_set_default_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3838
GRANT EXECUTE ON FUNCTION pg_tde_set_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3939
GRANT EXECUTE ON FUNCTION pg_tde_set_server_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
40+
GRANT EXECUTE ON FUNCTION pg_tde_delete_default_key() TO regress_pg_tde_access_control;
4041
SET ROLE regress_pg_tde_access_control;
4142
SELECT pg_tde_add_database_key_provider_file('local-file-provider', '/tmp/pg_tde_test_keyring.per');
4243
ERROR: must be superuser to modify key providers
@@ -56,5 +57,7 @@ SELECT pg_tde_set_default_key_using_global_key_provider('key1', 'global-file-pro
5657
ERROR: must be superuser to access global key providers
5758
SELECT pg_tde_set_server_key_using_global_key_provider('key1', 'global-file-provider');
5859
ERROR: must be superuser to access global key providers
60+
SELECT pg_tde_delete_default_key();
61+
ERROR: must be superuser to access global key providers
5962
RESET ROLE;
6063
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: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ GRANT EXECUTE ON FUNCTION pg_tde_delete_global_key_provider(TEXT) TO regress_pg_
2929
GRANT EXECUTE ON FUNCTION pg_tde_set_default_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3030
GRANT EXECUTE ON FUNCTION pg_tde_set_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
3131
GRANT EXECUTE ON FUNCTION pg_tde_set_server_key_using_global_key_provider(TEXT, TEXT, BOOLEAN) TO regress_pg_tde_access_control;
32+
GRANT EXECUTE ON FUNCTION pg_tde_delete_default_key() TO regress_pg_tde_access_control;
3233

3334
SET ROLE regress_pg_tde_access_control;
3435

@@ -41,6 +42,7 @@ SELECT pg_tde_delete_global_key_provider('global-file-provider');
4142
SELECT pg_tde_set_key_using_global_key_provider('key1', 'global-file-provider');
4243
SELECT pg_tde_set_default_key_using_global_key_provider('key1', 'global-file-provider');
4344
SELECT pg_tde_set_server_key_using_global_key_provider('key1', 'global-file-provider');
45+
SELECT pg_tde_delete_default_key();
4446

4547
RESET ROLE;
4648

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
@@ -604,6 +604,8 @@ pg_tde_delete_key(PG_FUNCTION_ARGS)
604604
if (principal_key == NULL)
605605
ereport(ERROR, errmsg("principal key does not exists for the database"));
606606

607+
ereport(LOG, errmsg("Deleting principal key [%s] for the database", principal_key->keyInfo.name));
608+
607609
/*
608610
* If database has something encryted, we can try to fallback to the
609611
* default principal key
@@ -658,12 +660,19 @@ pg_tde_delete_default_key(PG_FUNCTION_ARGS)
658660
TDEPrincipalKey *default_principal_key;
659661
List *dbs = NIL;
660662

663+
if (!superuser())
664+
ereport(ERROR,
665+
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
666+
errmsg("must be superuser to access global key providers"));
667+
661668
LWLockAcquire(tde_lwlock_enc_keys(), LW_EXCLUSIVE);
662669

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

674+
ereport(LOG, errmsg("Deleting default principal key [%s]", default_principal_key->keyInfo.name));
675+
667676
/*
668677
* Take row exclusive lock, as we do not want anybody to create/drop a
669678
* database in parallel. If it happens, its not the end of the world, but
@@ -707,7 +716,6 @@ pg_tde_delete_default_key(PG_FUNCTION_ARGS)
707716
pg_tde_delete_principal_key(dbOid);
708717
clear_principal_key_cache(dbOid);
709718
}
710-
list_free(dbs);
711719

712720
systable_endscan(scan);
713721
table_close(rel, RowExclusiveLock);
@@ -717,6 +725,9 @@ pg_tde_delete_default_key(PG_FUNCTION_ARGS)
717725
clear_principal_key_cache(DEFAULT_DATA_TDE_OID);
718726

719727
LWLockRelease(tde_lwlock_enc_keys());
728+
729+
list_free(dbs);
730+
720731
PG_RETURN_VOID();
721732
}
722733

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)