在更新语句中加密postgres列

时间:2017-08-15 08:31:57

标签: sql postgresql encryption sql-update

我在rhel7上使用postgres 9.2并开始查看列加密。我对使用INSERT语句进行加密没有任何问题,但我没有弄清楚如何使用UPDATE语句对已经包含行的表执行此操作。

我一直在使用此网址http://www.postgresonline.com/journal/archives/165-Encrypting-data-with-pgcrypto.html

中的示例

我的INSERT采用从此网址中获取的格式。

INSERT INTO testuserscards(username, cc)
SELECT robotccs.username, pgp_pub_encrypt(robotccs.cc, keys.pubkey) As cc
FROM (VALUES ('robby', '41111111111111111'),
    ('artoo', '41111111111111112') ) As robotccs(username, cc)
     CROSS JOIN (SELECT dearmor('-----BEGIN PGP PUBLIC KEY BLOCK-----
super publickey goobly gook goes here
-----END PGP PUBLIC KEY BLOCK-----') As pubkey) As keys;

我无法理解UPDATE语句如何组合在一起,我尝试了各种组合,如下所示({{1}使用不同的表格上面)。

INSERT

我想另一个选择是构建update dg_test t1 set var2 = t2.var2 from (select pgp_pub_encrypt(var1,keys.pubkey) as var2 from dg_test) t2 where t1.var1 = t2.var1 CROSS JOIN (SELECT dearmor('-----BEGIN PGP PUBLIC KEY BLOCK----- .... -----END PGP PUBLIC KEY BLOCK-----') As pubkey) As keys; 触发器来执行加密,然后运行ON INSERTDUMP

有人知道如何使用RESTORE吗?

1 个答案:

答案 0 :(得分:1)

从你的例子中,下面的问题是什么? (唯一的区别是我加入了pubkey与subuery中的原始表)

update dg_test t1 
 set var2 = t2.var2 from (
   select pgp_pub_encrypt(var1,keys.pubkey) as var2 
   from dg_test
   CROSS JOIN (SELECT dearmor('-----BEGIN...--END PGP PUBLIC KEY BLOCK-----') As pubkey) As keys;
 ) t2 
 where t1.var1 = t2.var1