Существует много способов предварительного шифрования. Одним из способов является то, что вы можете хэшировать данные в столбцах NAME
и Salary
с помощью секретного ключа.
Существует множество алгоритмов хеширования, включая, но не ограничиваясь md5
, sha1
, sha256
. Модуль pgcrypto в Postgresql предоставляет некоторые функции хеширования для использования.
Независимо от того, какой алгоритм хеширования вы используете, одно и то же значение всегда хешируется в одну и ту же строку. Например, хэш md5 A
всегда равен 7fc56270e7a70fa81a5935b72eacbe29
, а хэш B
всегда равен 9d5ed678fe57bcca610140957afab571
. Таким образом, вы можете присоединяться к таблицам как обычно.
Пример:
CREATE TABLE table1 (
"Name" VARCHAR(1),
"Date" TIMESTAMP,
"Salary" INTEGER
);
INSERT INTO table1
("Name", "Date", "Salary")
VALUES
(pgp_sym_encrypt('A', 'key'), '01/01/2019', '100'),
(pgp_sym_encrypt('A', 'key'), '01/02/2019', '200'),
(pgp_sym_encrypt('B', 'key'), '01/01/2019', '300');
CREATE TABLE table2 (
"Name" VARCHAR(1),
"Date of Birth" TIMESTAMP,
"No of Absence" INTEGER
);
INSERT INTO table2
("Name", "Date of Birth", "No of Absence")
VALUES
(pgp_sym_encrypt('A', 'key'), '10/12/1991', '10'),
(pgp_sym_encrypt('B', 'key'), '10/12/1992', '20');
SELECT pgp_sym_decrypt(table1."Name", 'key'), table1."Salary", table1."Date", pgp_sym_decrypt(table2."Name", 'key'), table2."Date of Birth", table2."No of Absence"
FROM table1 INNER JOIN table2 ON (table1."Name" = table2."Name");
Обратите внимание, что pgcrypto установлен.