sql - 在更新语句中加密 postgres 列

标签 sql postgresql encryption sql-update

我在 rhel7 上使用 postgres 9.2,并开始研究列加密。我没有问题让加密与 INSERT 一起工作声明,但我无法弄清楚如何使用 UPDATE 执行此操作已包含行的表的语句。

我一直在使用此 URL http://www.postgresonline.com/journal/archives/165-Encrypting-data-with-pgcrypto.html 中的示例

和我的 INSERT是从这个 URL 中获取的格式。

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 是怎么回事语句工作在一起,我尝试了各种组合,如下所示(使用上面的 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 INSERT触发器进行加密,然后运行 ​​DUMPRESTORE .

有没有人知道如何用 UPDATE 做到这一点? ?

最佳答案

从你的例子来看,下面的问题是什么? (唯一的区别是我加入 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

关于sql - 在更新语句中加密 postgres 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45689247/

相关文章:

mysql - 从 2Tables-Mysql 中删除通用 id 时发现问题

PHP MySQL - 将记录移动到另一个表,选择,插入,删除

sql - 为什么要在列名中指定主/外键属性

c# - 使用由 iOs CCCrypt 函数使用 AES 生成的 C# 解密 base64 字符串

java - 使用 Blowfish 时如何修复 Java 中的 NoSuchAlgorithmException?

string - 来自字符串的不可逆唯一 ID

php - MySQL触发器: How to know which script called it?

sql - PostgreSQL:将寄存器的值获取为多行

ruby-on-rails - 如何修复 PG::ProgramLimitExceeded: ERROR?

postgresql - postgresql 中的名称关键字