Merge pull request #287 from dutow/pg952

PG-952: Handle non existent principal key in tde_heap
pull/209/head
Zsolt Parragi 12 months ago committed by GitHub
commit d715cb14f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      src/access/pg_tde_tdemap.c
  2. 2
      src/catalog/tde_principal_key.c
  3. 16
      src/pg_tde_event_capture.c

@ -152,7 +152,7 @@ pg_tde_create_key_map_entry(const RelFileLocator *newrlocator)
{ {
LWLockRelease(lock_pk); LWLockRelease(lock_pk);
ereport(ERROR, ereport(ERROR,
(errmsg("failed to retrieve principal key"))); (errmsg("failed to retrieve principal key. Create one using pg_tde_set_principal_key before using encrypted tables.")));
return NULL; return NULL;
} }
@ -870,7 +870,7 @@ pg_tde_get_key_from_file(const RelFileLocator *rlocator)
{ {
LWLockRelease(lock_pk); LWLockRelease(lock_pk);
ereport(ERROR, ereport(ERROR,
(errmsg("failed to retrieve principal key"))); (errmsg("failed to retrieve principal key. Create one using pg_tde_set_principal_key before using encrypted tables.")));
} }
/* Get the file paths */ /* Get the file paths */

@ -257,7 +257,7 @@ set_principal_key_with_keyring(const char *key_name, GenericKeyring *keyring,
LWLockRelease(lock_files); LWLockRelease(lock_files);
ereport(ERROR, ereport(ERROR,
(errmsg("failed to retrieve principal key"))); (errmsg("failed to retrieve principal key. Create one using pg_tde_set_principal_key before using encrypted tables.")));
} }
principalKey->keyLength = keyInfo->data.len; principalKey->keyLength = keyInfo->data.len;

@ -21,6 +21,9 @@
#include "commands/event_trigger.h" #include "commands/event_trigger.h"
#include "common/pg_tde_utils.h" #include "common/pg_tde_utils.h"
#include "pg_tde_event_capture.h" #include "pg_tde_event_capture.h"
#include "commands/tablespace.h"
#include "catalog/tde_principal_key.h"
#include "miscadmin.h"
/* Global variable that gets set at ddl start and cleard out at ddl end*/ /* Global variable that gets set at ddl start and cleard out at ddl end*/
TdeCreateEvent tdeCurrentCreateEvent = {.relation = NULL}; TdeCreateEvent tdeCurrentCreateEvent = {.relation = NULL};
@ -97,6 +100,8 @@ pg_tde_ddl_command_start_capture(PG_FUNCTION_ARGS)
else if (IsA(parsetree, CreateStmt)) else if (IsA(parsetree, CreateStmt))
{ {
CreateStmt *stmt = (CreateStmt *) parsetree; CreateStmt *stmt = (CreateStmt *) parsetree;
TDEPrincipalKey * principal_key;
Oid tablespace_oid;
tdeCurrentCreateEvent.eventType = TDE_TABLE_CREATE_EVENT; tdeCurrentCreateEvent.eventType = TDE_TABLE_CREATE_EVENT;
tdeCurrentCreateEvent.relation = stmt->relation; tdeCurrentCreateEvent.relation = stmt->relation;
@ -105,6 +110,17 @@ pg_tde_ddl_command_start_capture(PG_FUNCTION_ARGS)
{ {
tdeCurrentCreateEvent.encryptMode = true; tdeCurrentCreateEvent.encryptMode = true;
} }
tablespace_oid = stmt->tablespacename != NULL ? get_tablespace_oid(stmt->tablespacename, false)
: MyDatabaseTableSpace;
principal_key = GetPrincipalKey(MyDatabaseId, tablespace_oid);
if (principal_key == NULL)
{
ereport(ERROR,
(errmsg("failed to retrieve principal key. Create one using pg_tde_set_principal_key before using encrypted tables.")));
}
} }
#endif #endif
PG_RETURN_NULL(); PG_RETURN_NULL();

Loading…
Cancel
Save