#sql #postgresql #data-masking
#sql #postgresql #маскирование данных
Вопрос:
TL; DR: каков эффективный способ перебрать 500 тысяч строк, применить пользовательскую логику преобразования / ciper к столбцу (или, возможно, нескольким) в каждой отдельной строке и обновить столбец преобразованными данными? Есть ли способ сделать это эффективно в SQL без необходимости писать отдельную программу для перебора каждой строки и применения логики?
Справочная информация: У нас есть таблица (~ 500 тыс. строк), и некоторые столбцы содержат конфиденциальные данные, которые необходимо замаскировать. Поскольку мы маскируем столбцы идентификаторов, которые используются в объединениях, маскировка должна быть согласованной во всех других таблицах. После долгих размышлений с алгоритмами MD5 / CRC / хэширования мы решили просто придерживаться нашего собственного алгоритма шифрования, который гарантирует уникальность, не приводя в итоге к слишком большому количеству бессмысленных символов.
Комментарии:
1. Зачем вам маскировать столбцы «identity»? Первичный ключ не содержит никаких конфиденциальных данных — это просто уникальный номер
2. Вместо изменения данных, почему бы не создать представления, которые возвращают «замаскированные» данные? Что-то вроде этого: blog.taadeem.net/english/2018/10/29 /…
Ответ №1:
Если вы хотите заменить значения на месте, то вам нужно убедиться, что типы совместимы — существующий столбец имеет тот же тип, что и столбец назначения. Затем:
update t
set col = my_cipher(col);
Это относительно дорого, потому что обновляется каждая строка.
Если типы не совпадают, то перед вами стоит более сложная задача. Похоже, что столбцы, которые вы хотите изменить, являются внешними ключами. Вероятно, вам нужно удалить все ограничения внешнего ключа и модифицировать таблицы так, чтобы столбцы имели одинаковый тип, изменить значения, а затем добавить внешние ключи обратно.