繁体   English   中英

如何更新没有任何数据的行以唯一标识该行?

[英]How to update a row without any data to uniquely identify the row?

我有一个包含一个文本列的表(还有其他一些列。但它们在这里无关紧要)。 此列中的值可以包含重复项。 该表没有任何主键或其他唯一数据来单独标识每一行。

文本之前使用 Blowfish 算法加密。 但我们现在计划使用 AES 加密文本。

因此,我们从表中取出一批行,然后通过我们的 java 代码运行它,该代码执行从 Blowfish 到 AES 的转换。 但是,由于我们没有唯一的键来识别行,我如何确保我们正在更新正确的列。

我可以想到两种方法来做到这一点。 1)向数据库添加一个自动递增的主键/唯一键。 这虽然是理想的,但会导致我们的应用程序中的大量代码更改。 2) 以某种奇怪的方式使用 rownum 进行更新。 我担心这种方法的数据完整性。

有没有其他方法可以做到这一点? 或最好的方法是什么?

我们正在使用 Oracle SQL DB 和 JDBCTemplate。

在您描述的场景中,我不确定您为什么关心; 只需下载该行,解密它,删除它,重新加密它并插入新值。 如果结果多行发生变化,那就这样吧; 无论如何,您无法分辨它们以前是什么,并且您说行上没有其他东西可以唯一标识它,因此系统必须容忍丢失信息

我的意思是,假设您有两个文本值:

hello
goodbye

你对它们进行了加密,它们变得相同:

1235
1235

要么其中一个现在丢失了,解密 1235 将始终产生“hello”,要么解密者知道 1235 将产生“hello”或“goodbye”——你可以同时运行这两个“hello”/“goodbye” “通过您的新算法生成唯一值 111 和 222,因此您可以安全地从表中删除所有 1235( delete from t where enctext = 1235 )并插入 111 和 222..

在表中复制 1235 并没有任何帮助(你不能说“这个 1235 解密给你好,但是那个 1235 解密给再见”,因为那时必须添加一些其他的知识——也可以唯一的知识识别行。如果事情如你所说,你不需要关心哪个是什么;要么两者都是,你可以检索到原始数据进行重新加密,或者你不能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM