mirror of https://github.com/postgres/postgres
Conflicts - contrib/pg_tde/Makefile - contrib/pg_tde/expected/change_access_method.out - contrib/pg_tde/meson.build - contrib/pg_tde/src/access/pg_tde_tdemap.c - contrib/pg_tde/src/access/pg_tde_xlog_encrypt.c - contrib/pg_tde/src/keyring/keyring_vault.c - contrib/pg_tde/src/pg_tde.c - contrib/pg_tde/src/pg_tde_alter_key_provider.c - contrib/pg_tde/src/pg_tde_event_capture.c - src/bin/Makefile - src/bin/meson.build Deleted in TDE_REL_17_STABLE - contrib/pg_tde/expected/change_access_method_basic.out - contrib/pg_tde/expected/vault_v2_test_basic.out - contrib/pg_tde/sql/change_access_method.inc - contrib/pg_tde/sql/vault_v2_test.inc - src/bin/pg_tde_change_key_provider/Makefile - src/bin/pg_tde_change_key_provider/meson.buildpull/209/head
commit
3a6422b9f9
@ -1,5 +0,0 @@ |
|||||||
# Switch from Percona Server for PostgreSQL to PostgreSQL Community |
|
||||||
|
|
||||||
Percona Server for PostgreSQL and PostgreSQL Community are binary compatible and enable you to switch from one to another. Here's how: |
|
||||||
|
|
||||||
1. If you used the `tde_heap` (tech preview feature) access method for encryption, either re-encrypt the data using the `tde_heap_basic` access method, or [decrypt](decrypt.md) it completely |
|
@ -0,0 +1,74 @@ |
|||||||
|
CREATE EXTENSION IF NOT EXISTS pg_tde; |
||||||
|
SELECT * FROM pg_tde_principal_key_info(); |
||||||
|
ERROR: Principal key does not exists for the database |
||||||
|
HINT: Use set_principal_key interface to set the principal key |
||||||
|
SELECT pg_tde_add_key_provider_file('file-provider','/tmp/pg_tde_test_keyring.per'); |
||||||
|
pg_tde_add_key_provider_file |
||||||
|
------------------------------ |
||||||
|
1 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
id | provider_name | provider_type | options |
||||||
|
----+---------------+---------------+------------------------------------------------------------ |
||||||
|
1 | file-provider | file | {"type" : "file", "path" : "/tmp/pg_tde_test_keyring.per"} |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_delete_key_provider('file-provider'); |
||||||
|
pg_tde_delete_key_provider |
||||||
|
---------------------------- |
||||||
|
|
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
id | provider_name | provider_type | options |
||||||
|
----+---------------+---------------+--------- |
||||||
|
(0 rows) |
||||||
|
|
||||||
|
SELECT pg_tde_add_key_provider_file('file-provider','/tmp/pg_tde_test_keyring.per'); |
||||||
|
pg_tde_add_key_provider_file |
||||||
|
------------------------------ |
||||||
|
2 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
id | provider_name | provider_type | options |
||||||
|
----+---------------+---------------+------------------------------------------------------------ |
||||||
|
2 | file-provider | file | {"type" : "file", "path" : "/tmp/pg_tde_test_keyring.per"} |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_delete_key_provider('file-provider'); |
||||||
|
pg_tde_delete_key_provider |
||||||
|
---------------------------- |
||||||
|
|
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
id | provider_name | provider_type | options |
||||||
|
----+---------------+---------------+--------- |
||||||
|
(0 rows) |
||||||
|
|
||||||
|
SELECT pg_tde_add_key_provider_file('file-provider','/tmp/pg_tde_test_keyring.per'); |
||||||
|
pg_tde_add_key_provider_file |
||||||
|
------------------------------ |
||||||
|
3 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
id | provider_name | provider_type | options |
||||||
|
----+---------------+---------------+------------------------------------------------------------ |
||||||
|
3 | file-provider | file | {"type" : "file", "path" : "/tmp/pg_tde_test_keyring.per"} |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_delete_key_provider('file-provider'); |
||||||
|
pg_tde_delete_key_provider |
||||||
|
---------------------------- |
||||||
|
|
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
id | provider_name | provider_type | options |
||||||
|
----+---------------+---------------+--------- |
||||||
|
(0 rows) |
||||||
|
|
||||||
|
DROP EXTENSION pg_tde; |
@ -0,0 +1,8 @@ |
|||||||
|
CREATE EXTENSION pg_tde; |
||||||
|
-- should fail |
||||||
|
CREATE TABLE t1 (n INT) USING tde_heap; |
||||||
|
ERROR: failed to retrieve principal key. Create one using pg_tde_set_principal_key before using encrypted tables. |
||||||
|
-- should work |
||||||
|
CREATE TABLE t2 (n INT) USING heap; |
||||||
|
DROP TABLE t2; |
||||||
|
DROP EXTENSION pg_tde; |
@ -0,0 +1,134 @@ |
|||||||
|
CREATE EXTENSION IF NOT EXISTS pg_tde; |
||||||
|
SELECT pg_tde_add_key_provider_file('file-vault','/tmp/pg_tde_test_keyring.per'); |
||||||
|
pg_tde_add_key_provider_file |
||||||
|
------------------------------ |
||||||
|
1 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_set_principal_key('test-db-principal-key','file-vault'); |
||||||
|
pg_tde_set_principal_key |
||||||
|
-------------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SET default_table_access_method = "tde_heap"; |
||||||
|
CREATE TABLE t1(n integer); |
||||||
|
SELECT pg_tde_is_encrypted('t1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
VACUUM FULL t1; |
||||||
|
SELECT pg_tde_is_encrypted('t1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
CREATE TABLE test_tab1 AS SELECT generate_series(1,10) a; |
||||||
|
CREATE INDEX test_idx1 ON test_tab1(a); |
||||||
|
SELECT pg_tde_is_encrypted('test_tab1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_is_encrypted('test_idx1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
REINDEX index CONCURRENTLY test_idx1; |
||||||
|
SELECT pg_tde_is_encrypted('test_tab1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_is_encrypted('test_idx1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
CREATE TABLE mvtest_t (id int NOT NULL PRIMARY KEY, type text NOT NULL, amt numeric NOT NULL); |
||||||
|
INSERT INTO mvtest_t VALUES |
||||||
|
(1, 'x', 2), |
||||||
|
(2, 'x', 3), |
||||||
|
(3, 'y', 5), |
||||||
|
(4, 'y', 7), |
||||||
|
(5, 'z', 11); |
||||||
|
CREATE MATERIALIZED VIEW mvtest_tm AS SELECT type, sum(amt) AS totamt FROM mvtest_t GROUP BY type WITH NO DATA; |
||||||
|
SELECT pg_tde_is_encrypted('mvtest_tm'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
REFRESH MATERIALIZED VIEW mvtest_tm; |
||||||
|
SELECT pg_tde_is_encrypted('mvtest_tm'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
CREATE TYPE rewritetype AS (a int); |
||||||
|
CREATE TABLE rewritemetoo1 OF rewritetype; |
||||||
|
CREATE TABLE rewritemetoo2 OF rewritetype; |
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo2'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
ALTER TYPE rewritetype ALTER ATTRIBUTE a TYPE text cascade; |
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo1'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo2'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
CREATE TABLE encrypted_table ( |
||||||
|
id SERIAL, |
||||||
|
data TEXT, |
||||||
|
created_at DATE NOT NULL, |
||||||
|
PRIMARY KEY (id, created_at) |
||||||
|
) USING tde_heap; |
||||||
|
CREATE INDEX idx_date ON encrypted_table (created_at); |
||||||
|
SELECT pg_tde_is_encrypted('encrypted_table'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
CLUSTER encrypted_table USING idx_date; |
||||||
|
SELECT pg_tde_is_encrypted('encrypted_table'); |
||||||
|
pg_tde_is_encrypted |
||||||
|
--------------------- |
||||||
|
t |
||||||
|
(1 row) |
||||||
|
|
||||||
|
DROP EXTENSION pg_tde CASCADE; |
||||||
|
NOTICE: drop cascades to 7 other objects |
||||||
|
DETAIL: drop cascades to table t1 |
||||||
|
drop cascades to table test_tab1 |
||||||
|
drop cascades to table mvtest_t |
||||||
|
drop cascades to materialized view mvtest_tm |
||||||
|
drop cascades to table rewritemetoo1 |
||||||
|
drop cascades to table rewritemetoo2 |
||||||
|
drop cascades to table encrypted_table |
||||||
|
RESET default_table_access_method; |
@ -0,0 +1,8 @@ |
|||||||
|
CREATE EXTENSION pg_tde; |
||||||
|
SELECT pg_tde_version(); |
||||||
|
pg_tde_version |
||||||
|
----------------- |
||||||
|
pg_tde 1.0.0-rc |
||||||
|
(1 row) |
||||||
|
|
||||||
|
DROP EXTENSION pg_tde; |
@ -0,0 +1,20 @@ |
|||||||
|
CREATE EXTENSION IF NOT EXISTS pg_tde; |
||||||
|
|
||||||
|
SELECT * FROM pg_tde_principal_key_info(); |
||||||
|
|
||||||
|
SELECT pg_tde_add_key_provider_file('file-provider','/tmp/pg_tde_test_keyring.per'); |
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
SELECT pg_tde_delete_key_provider('file-provider'); |
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
|
||||||
|
SELECT pg_tde_add_key_provider_file('file-provider','/tmp/pg_tde_test_keyring.per'); |
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
SELECT pg_tde_delete_key_provider('file-provider'); |
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
|
||||||
|
SELECT pg_tde_add_key_provider_file('file-provider','/tmp/pg_tde_test_keyring.per'); |
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
SELECT pg_tde_delete_key_provider('file-provider'); |
||||||
|
SELECT * FROM pg_tde_list_all_key_providers(); |
||||||
|
|
||||||
|
DROP EXTENSION pg_tde; |
@ -0,0 +1,11 @@ |
|||||||
|
CREATE EXTENSION pg_tde; |
||||||
|
|
||||||
|
-- should fail |
||||||
|
CREATE TABLE t1 (n INT) USING tde_heap; |
||||||
|
|
||||||
|
-- should work |
||||||
|
CREATE TABLE t2 (n INT) USING heap; |
||||||
|
|
||||||
|
DROP TABLE t2; |
||||||
|
|
||||||
|
DROP EXTENSION pg_tde; |
@ -0,0 +1,54 @@ |
|||||||
|
CREATE EXTENSION IF NOT EXISTS pg_tde; |
||||||
|
|
||||||
|
SELECT pg_tde_add_key_provider_file('file-vault','/tmp/pg_tde_test_keyring.per'); |
||||||
|
SELECT pg_tde_set_principal_key('test-db-principal-key','file-vault'); |
||||||
|
|
||||||
|
SET default_table_access_method = "tde_heap"; |
||||||
|
|
||||||
|
CREATE TABLE t1(n integer); |
||||||
|
SELECT pg_tde_is_encrypted('t1'); |
||||||
|
VACUUM FULL t1; |
||||||
|
SELECT pg_tde_is_encrypted('t1'); |
||||||
|
|
||||||
|
CREATE TABLE test_tab1 AS SELECT generate_series(1,10) a; |
||||||
|
CREATE INDEX test_idx1 ON test_tab1(a); |
||||||
|
SELECT pg_tde_is_encrypted('test_tab1'); |
||||||
|
SELECT pg_tde_is_encrypted('test_idx1'); |
||||||
|
REINDEX index CONCURRENTLY test_idx1; |
||||||
|
SELECT pg_tde_is_encrypted('test_tab1'); |
||||||
|
SELECT pg_tde_is_encrypted('test_idx1'); |
||||||
|
|
||||||
|
CREATE TABLE mvtest_t (id int NOT NULL PRIMARY KEY, type text NOT NULL, amt numeric NOT NULL); |
||||||
|
INSERT INTO mvtest_t VALUES |
||||||
|
(1, 'x', 2), |
||||||
|
(2, 'x', 3), |
||||||
|
(3, 'y', 5), |
||||||
|
(4, 'y', 7), |
||||||
|
(5, 'z', 11); |
||||||
|
CREATE MATERIALIZED VIEW mvtest_tm AS SELECT type, sum(amt) AS totamt FROM mvtest_t GROUP BY type WITH NO DATA; |
||||||
|
SELECT pg_tde_is_encrypted('mvtest_tm'); |
||||||
|
REFRESH MATERIALIZED VIEW mvtest_tm; |
||||||
|
SELECT pg_tde_is_encrypted('mvtest_tm'); |
||||||
|
|
||||||
|
CREATE TYPE rewritetype AS (a int); |
||||||
|
CREATE TABLE rewritemetoo1 OF rewritetype; |
||||||
|
CREATE TABLE rewritemetoo2 OF rewritetype; |
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo1'); |
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo2'); |
||||||
|
ALTER TYPE rewritetype ALTER ATTRIBUTE a TYPE text cascade; |
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo1'); |
||||||
|
SELECT pg_tde_is_encrypted('rewritemetoo2'); |
||||||
|
|
||||||
|
CREATE TABLE encrypted_table ( |
||||||
|
id SERIAL, |
||||||
|
data TEXT, |
||||||
|
created_at DATE NOT NULL, |
||||||
|
PRIMARY KEY (id, created_at) |
||||||
|
) USING tde_heap; |
||||||
|
CREATE INDEX idx_date ON encrypted_table (created_at); |
||||||
|
SELECT pg_tde_is_encrypted('encrypted_table'); |
||||||
|
CLUSTER encrypted_table USING idx_date; |
||||||
|
SELECT pg_tde_is_encrypted('encrypted_table'); |
||||||
|
|
||||||
|
DROP EXTENSION pg_tde CASCADE; |
||||||
|
RESET default_table_access_method; |
@ -0,0 +1,3 @@ |
|||||||
|
CREATE EXTENSION pg_tde; |
||||||
|
SELECT pg_tde_version(); |
||||||
|
DROP EXTENSION pg_tde; |
@ -0,0 +1 @@ |
|||||||
|
/pg_tde_change_key_provider |
Loading…
Reference in new issue