我使用libpqxx连接到C ++中的PostgreSQL DB。我想加密一列表并用当前列替换它。我写这个:
int num;
cout << "Select Your COLUMN Number For Encryption: ";
cin >> num;
/* Create SQL statement */
sql = "SELECT * from " + tbName;
/* Execute SQL query */
result R3( N.exec( sql ));
/* List down all the records */
for (result::const_iterator c = R3.begin(); c != R3.end(); ++c) {
c[num].as<string>() = encnum->encryptionData(3,5,c[num].as<int>());
cout << "Encryption = " << c[num].as<string>() << endl;
}
但结果就像加密之前一样。我错了什么?如何将值替换为列中的其他值?
答案 0 :(得分:0)
因此,我对您的问题的理解是您有一列文本或二进制数据,并且您希望将该列中的所有行更新为表示文件当前内容的加密版本的密文。
有两种方法。
一次选择并更新一行。优点是您可以更轻松地管理交易规模。换句话说,在这种情况下,您一次更新一个值并在客户端中进行加密。
您可以使用类似pg_crypto
的内容来加密数据并使用单个更新查询来执行此操作。请注意,这可能需要更长的打开写入事务限制autovacuum可以清理的内容。此外,还需要为查询提供密钥,因此您可以在日志中进行密钥泄露。
这些方法之间存在巨大的权衡。在PostgreSQL中,通常由于您在后端获得的密钥泄露和管理问题而完成客户端管理的加密。然而,存在其他方法。