2017-01-16 4 views
3

Каков наиболее эффективный метод или инструмент для рандомизации списка столбцов таблицы базы данных, чтобы скрыть конфиденциальную информацию?Как дезинфицировать или рандомизировать секретные поля базы данных

У меня есть приложение Django, используемое несколькими клиентами, и мне нужно, чтобы некоторые разработчики по разработке работали над приложением. Когда они работают с ошибками (например, страница/admin/model/123 имеет ошибку), в идеале им понадобится моментальный снимок базы данных клиента, чтобы воспроизвести и исправить ошибку. Однако, поскольку они являются сторонними подрядчиками, я бы хотел снизить риск в случае, если они раскрывают клиентскую базу данных (непреднамеренно или иначе). Я не хочу объяснять клиенту, почему все их данные были опубликованы онлайн, потому что иностранный подрядчик оставил свой ноутбук в разблокированном автомобиле.

Для этого я бы хотел найти или написать инструмент для «рандомизации» чувствительных полей в базе данных, таких как имена пользователей, адреса электронной почты, номера учетных записей, названия компаний, номера телефонов и т. Д., Так что структура данные сохраняются, но вся личная информация удаляется.

Предположительно, это задача, которую многие другие люди должны были сделать, но я не уверен, что такое технический термин, поэтому я не очень много разбираюсь в Google. Существуют ли какие-либо существующие инструменты для этого с приложением Django, использующим бэкэнд MySQL или PostgreSQL?

ответ

1

Anonymize и sanitize - хорошие слова для этого.

Относительно легко сделать. Используйте такие запросы, как

UPDATE person 
    SET name = CONCAT('Person', person_id), 
     email = CONCAT('Person', person_id, '@example.com') 

и т. Д., Чтобы топать фактические имена и адреса электронной почты и все такое. Полезно сохранять уникальность записей, и автоинкрементные идентификаторы различных таблиц могут помочь вам в этом.

+0

Это может работать для простых полей, но это не будет работать для более сложных полей, таких как адрес, номера телефонов или номера учетных записей, которые должны соответствовать определенному формату, но все же быть глобально уникальный. – Cerin

1

(Добавление это как ответ, так как я не имею права комментировать пока.)

Как сказал Керин, О. Джонс подход к анонимизирующему/дезинфицирующим работам для простых полей, но не более сложных из них, как адреса, номер телефона или номера учетной записи, которые должны соответствовать определенному формату. Тем не менее, этот метод может быть изменен и для этого.

Давайте возьмем номер телефона с форматом aaa-bbbb-ccc в качестве примера и используем autoincrementing person_id как источник уникальных номеров. Для части ccc номера телефона используйте MOD (person_id, 1000). Это даст остаток person_id, деленный на 1000. Для bbbb возьмите MOD ((person_id-MOD (person_id, 1000))/1000 10000). Это выглядит сложным, но то, что он делает, - это взять person_id, удалив последние три цифры (которые были использованы для ccc), а затем делит на 1000. Последние четыре цифры берутся из полученного числа, которое нужно использовать в качестве bbbb. Я думаю, вы сможете выяснить, как вычислить aaa.

Три части номера телефона, то можно объединить, чтобы дать полный номер телефона: CONCAT (ааа, «-», BBBB, «-», ссс)

(Вы, возможно, придется явно преобразовать номера в строку, я не уверен)

 Смежные вопросы

  • Нет связанных вопросов^_^