Запутать / Маска / Scramble личная информация - PullRequest
9 голосов
/ 04 октября 2008

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

DECLARE @Names TABLE (Id int IDENTITY(1,1),[Name] varchar(100))

/* Scramble the last names (randomly pick another last name) */
INSERT @Names SELECT LastName FROM Customer ORDER BY NEWID();
WITH [Customer ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS ROWID, LastName FROM Customer)
UPDATE [Customer ORDERED BY ROWID] SET LastName=(SELECT [Name] FROM @Names WHERE ROWID=Id)

Это хорошо работало в тесте, но полностью справлялось с большими объемами данных (> 20 минут для строк по 40 КБ)

Все это, чтобы спросить, как бы вы зашифровали имена клиентов, сохраняя при этом настоящие имена и вес производственных данных?

ОБНОВЛЕНИЕ: Никогда не подводит, вы пытаетесь поместить всю информацию в пост, и вы забыли что-то важное. Эти данные также будут использоваться в наших коммерческих и демонстрационных средах, которые являются общедоступными. Некоторые из ответов - это то, что я пытаюсь сделать, чтобы «переключать» имена, но мой вопрос буквально, как кодировать в T-SQL?

Ответы [ 12 ]

0 голосов
/ 04 октября 2008

Честно говоря, я не уверен, зачем это нужно. Ваша среда разработки / тестирования должна быть закрытой, защищенной брандмауэром и недоступной из Интернета.

Вашим разработчикам следует доверять, и у вас есть право обратиться к ним за помощью, если они не оправдают ваше доверие.

Я думаю, что реальный вопрос должен быть «Должен ли я шифровать данные?», И ответ (на мой взгляд) «нет».

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

Конечным результатом будет таблица с теми же данными, но с произвольной реорганизацией. Я полагаю, что он также должен быть быстрее вашей временной таблицы.

Должно быть достаточно просто реализовать Fisher-Yates Shuffle в SQL ... или, по крайней мере, в консольном приложении, которое читает БД и записывает в цель.

Редактировать (2): Ответ на манжету в T-SQL:

объявить @name varchar (50) set @name = (ВЫБЕРИТЕ фамилию от лица, где personID = (случайный идентификационный номер) Обновить человека установить фамилию = @ имя WHERE personID = (идентификатор лица текущей строки)

Оберните это в цикл и следуйте указаниям Фишера-Йейтса для изменения ограничений случайных значений, и вы будете установлены.

0 голосов
/ 04 октября 2008

Почему бы просто не использовать какой-нибудь Генератор случайных имен?

...