Как обновить строку без каких-либо данных, чтобы однозначно идентифицировать строку? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть таблица с одним единственным текстовым столбцом (есть некоторые другие столбцы. Но они здесь не имеют значения). Значения в этом столбце могут содержать дубликаты. В таблице нет первичного ключа или других уникальных данных для индивидуальной идентификации каждой строки.

Текст ранее был зашифрован с использованием алгоритма Blowfi sh. Но сейчас мы планируем зашифровать текст с помощью AES.

Итак, мы берем пакет строк из таблицы и затем запускаем его через наш код java, который выполняет преобразование из Blowfi sh в AES. Но, поскольку у нас нет уникального ключа для идентификации строки, как мне убедиться, что мы обновляем правильный столбец.

Я могу придумать два способа сделать это. 1) Добавить автоинкрементный первичный ключ / уникальный ключ в БД. Что, хотя и идеально, приведет к большим изменениям кода в нашем приложении. 2) Сделайте обновление, используя rownum, каким-то странным способом. Я обеспокоен целостностью данных при таком подходе.

Есть ли другой способ сделать это? или Какой лучший подход?

Мы используем Oracle SQL DB и JDBCTemplate.

1 Ответ

0 голосов
/ 06 апреля 2020

В сценарии, который вы описали, я не уверен, почему вы заботитесь; просто загрузите строку, расшифруйте ее, удалите, повторно зашифруйте и вставьте новые значения. Если несколько строк изменяются в результате, пусть будет так; в любом случае вы не можете сказать, что они были раньше, и вы говорите, что в строке нет ничего, что однозначно идентифицирует ее, поэтому система должна быть терпимой к потере информации

Я имею в виду, что у вас было два текстовые значения:

hello
goodbye

И вы зашифровали их, и они стали одинаковыми:

1235
1235

Либо одно из них теперь потеряно, и расшифровка 1235 всегда будет вызывать "привет" или что дешифрованный знает, что 1235 выдаст «привет» или «до свидания» - вы можете запустить оба из этих «привет» / «до свидания» через новый алгоритм, который выдает уникальные значения 111 и 222, так что вы можете безопасно стереть все 1235 из таблицы (delete from t where enctext = 1235) и вставка 111 и 222 ..

Дублирование 1235 в таблице было бесполезно (вы не могли бы сказать, что эти 1235 расшифровываются на привет, но этот 1235 расшифровывается до свидания ", потому что тогда должно быть добавлено какое-то другое знание - знание, которое также может однозначно идентифицировать строку. Если все так, как вы говорите Вам не нужно беспокоиться о том, что было чем; либо было и то и другое, и вы можете либо восстановить исходные данные для повторного шифрования, либо нет

...