Защита данных SQL Server с использованием статической маскировки данных

Tags: SSMS, data, database, данные

В целях защиты данных и соблюдения таких правил, как GDPR и HIPAA, базы данных, используемые разработчиками и тестировщиками, не должны содержать конфиденциальные данные из производственных баз данных. Чтобы помочь администраторам баз данных защитить данные, Microsoft выпустила новую функцию в составе SSMS, которая называется статическим маскированием данных. В этой статье Грег Ларсен демонстрирует, как использовать эту новую функцию.

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

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

Что такое статическая маскировка данных?

Маскировка (маскирование) статических данных - это процесс постоянной замены конфиденциальных данных в вашей базе данных бессмысленными значениями. Эти бессмысленные значения можно создать, запутав часть или полное значение столбца сгенерированным значением. На диаграмме 1 показано, как статическая маскировка данных заменяет полное значение столбца CreditCardNum одним сгенерированным значением для всех номеров кредитных карт.

 

Диаграмма 1: Пример маскирования статических данных с одним значением

Выполнение статической маскировки данных

Затенение ваших конфиденциальных данных при копировании ваших производственных данных в непроизводственные среды - это один из способов защиты ваших конфиденциальных/чувствительных производственных данных. Чтобы помочь с выполнением статического маскирования данных, группа Microsoft Security включает статическое маскирование данных в качестве новой функции в SQL Server Management Studio (SSMS) 18.0 preview 5 или выше. С введением этой новой функции вы теперь можете создавать клонированную копию локальной базы данных SQL Server, где конфиденциальные/чувствительные данные статически маскируются в клонированной копии базы данных.

Предварительный просмотр SSMS версии 5 и выше позволяет определить, какие столбцы должны быть замаскированы, а также функции, которые будут использоваться в операциях маскирования. Эти определения маскировки затем используются для создания копии вашей базы данных, которая содержит очищенные, статически замаскированные данные, где они определены. Функция маскирования статических данных работает в SQL Server 2012 или более новых базах данных, а также с базой данных SQL Azure (опции размещения на основе DTU и vCore, кроме Hyperscale) и SQL Server на виртуальной машине Azure.

Как получить последнюю версию SSMS

Чтобы узнать, как выполнять статическую маскировку данных, сначала необходимо получить биты для предварительного просмотра SSMS 18.0 5 или выше. Чтобы загрузить биты, которые имеют функцию статического маскирования данных, посмотрите эту страницу, чтобы найти последнюю версию загрузки, которая поддерживает статическое маскирование данных (на момент написания этой статьи это был предварительный просмотр 6).

Запустите exe, чтобы установить предварительный просмотр 6 битов, и вам, возможно, придется перезагрузить компьютер. С установкой новейшей версии SSMS вы готовы протестировать эту новую функцию маскирования статических данных.

Методы маскирования данных

Прежде чем я смогу продемонстрировать, как маскировать данные с помощью SSMS Preview 6, я сначала рассмотрю функции маскирования статических данных, которые доступны в этой новой версии. Доступны пять вариантов статического маскирования: NULL, однозначное, случайное, групповое и групповое. Требования к маскированию определяют, какая из этих функций маскирования будет использоваться. Вот более подробное описание каждой функции:

Маскировка значениями NULL:

Функция маскирования значениями NULL заменит исходное значение столбца на ноль в клонированной базе данных. Обратите внимание, что замаскированный столбец должен поддерживать нулевые столбцы, чтобы использовать этот параметр маскирования.

Маскировка одним значением:

Функция маскирования одним значением заменяет исходные значения столбца одним значением по вашему выбору. Помните, что одно значение должно быть преобразовано в тип данных столбца маскируемого столбца.

Маскировка перемешиванием:

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

Маскировка групповым перемешиванием:

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

Маскирование составными строками:

Маскирование составными строками позволяет случайным образом генерировать маскированные данные с использованием шаблона. Этот шаблон может заменить и отформатировать все значение столбца или только часть значения столбца. Шаблоны предоставляются с использованием регулярных выражений.

Пример базы данных для тестирования статической маскировки данных

Чтобы продемонстрировать создание базы данных со статической маской, создайте демонстрационную базу данных с именем StaticMaskingDemo, используя код T-SQL из сценария 1.

USE master;

GO

-- Drop Database

DROP DATABASE IF EXISTS StaticMaskingDemo

GO

-- Create Sample DB

CREATE DATABASE StaticMaskingDemo;

GO

USE StaticMaskingDemo;

GO

-- Create Sample Tables

CREATE TABLE CreditCard (

ID int,

CreditCardNum varchar(16),

SecurityCode int);

CREATE TABLE Client (

ID int,

CreditCardID varchar(16),

ClientName varchar (50),

BirthDate date,

EmailAddr varchar(100),

AddrLine varchar(60),

City varchar (30),

PostalCode varchar(15));

-- Populate with data

INSERT INTO CreditCard VALUES

(1, 1000100010001000,100),

(2, 1234123412341234,123),

(3, 1111222233334444,333),

(4, 1234567890123456,456);

INSERT INTO Client VALUES

(1, 1, 'John A. Smith','12-23-1954','JSmith@SmithWorks.com','1000 Smith Ave.','Portland','97035'),

(2, 2, 'Sally Johnson','07-12-1974','SallyJ@WLTS.gov','1234 Marine View Dr.','San Francisco','94016'),

(3, 3, 'Mary Sullivan','09-01-1972','MSS@InsComp.org','1111 Soundview Dr.','Bellingham','98225'),

(4, 4, 'Thomas J. Storm','11-17-1959','TJStorm@SutterSmith.com','2345 Water Street','Bloomington','47401');

 

Сценарий 1: создание образца базы данных

 

Сценарий создал две таблицы: Client и CreditCard. Таблица 1 содержит спецификацию маскирования для маскирования базы данных примера.



Столбец таблицы

Спецификация маскирования

CreditCard.CreditCardNum

Составными строками (заменить первые 10 цифр на X).

CreditCard.SecurityCode

Одним значением (заменить все значения на 123)

Client.ClientName

Перемешиванием

Client.BirthDate

Значениями Null

Client.EmailAddr

Составными строками (сохранить домен, но заменить часть до знака @ случайным значением)

Client.AddrLine

Групповым перемешиванием

Client.City

Групповым перемешиванием

Client.PostalCode

Групповым перемешиванием

 

Таблица 1: Спецификация маскировки

Определение критериев маскирования с использованием SSMS

После создания базы данных убедитесь, что вы используете новую версию SSMS. Новая задача с именем Mask Database… (Preview) используется для определения критериев маскирования. Чтобы вызвать эту новую задачу, подключитесь к локальному экземпляру SQL Server. Щелкните правой кнопкой мыши базу данных StaticMaskingDemo в Object Explorer. В раскрывающемся списке наведите курсор на элемент Tasks  и, наконец, выберите задачу Mask Database… (Preview) во втором раскрывающемся меню, как показано красной стрелкой на рисунке 1.

 

Рисунок 1: Выбор задачи Mask Database

После выбора задачи отобразится окно, показанное на рисунке 2.

 

Рисунок 2: Шаги статической маскировки

На рисунке 2 показано, что нужно выполнить три шага, чтобы определить требования к маскировке для базы данных.

Шаг 1: Настройка маскирования

Взглянув на шаг настройки маскирования (шаг 1), вы увидите, что в базе данных содержатся две таблицы: Client и CreditCard. Чтобы указать статическую маскировку данных, начните с указания конфигурации маскирования для столбца CreditCardNum в таблице CreditCard. Чтобы отобразить столбцы в таблице CreditCard, щелкните значок стрелки вниз рядом с именем таблицы. После этого на экране появится рисунок 3.

 

Рисунок 3: Столбцы в таблице CreditCard.

Используйте функцию маскирования составными строками (String Composite) для столбца CreditCardNum и функцию маскирования одним значением (Single Value) для столбца SecurityCode.

Функция маскирования составными строками используется для столбца CreditCardNum, чтобы показать последние 6 цифр номера кредитной карты, при этом первые 10 цифр заменены на X. Опция «расширенной» маскировки необходима для определения этого сложного критерия маскировки. Сначала установите флажок рядом со столбцом CreditCardNum, чтобы указать, что вы хотите замаскировать этот столбец. Затем выберите элемент String Composite из выпадающего списка. Затем, наконец, щелкните параметр гиперссылки Configure…, как показано на рисунке 4.

 

Рисунок 4: Критерии маскирования для столбца CreditCardNum

После нажатия на гиперссылку Configure… открывается окно спецификации шаблона, показанное на рисунке 5.

 

Рисунок 5: Спецификации шаблона

Окно спецификаций шаблона может использоваться для определения критерия случайного значения на основе выражения шаблона. Чтобы замаскировать часть столбца CreditCardNum с использованием сложных критериев маскирования, установите флажок Advanced, чтобы настроить более сложные требования маскирования.

Расширенная спецификация маскирования позволяет указать сложные требования маскирования. Как указывалось ранее, только первые десять символов CreditCardNum должны быть заменены на X. Следовательно, на рисунке 6 показан шаблон из десяти X (XXXXXXXXXX), который идентифицирует шаблон, который будет использоваться для маскировки первых десяти символов столбца номера кредитной карты. Чтобы определить, какие символы в источнике будут заменены на десять X, укажите значение шаблона исходного регулярного выражения (\d{10}). Этот шаблон определяет, что первые 10 цифр столбца CreditCard будут заменены символами на десять X. На рисунке 6 показано окно после его настройки.

 

Рисунок 6: Расширенные спецификации маскировки

Другой столбец для маскировки в таблице CreditCard - SecurityCode. Этот столбец будет замаскирован одним значением 123 во всех строках. Чтобы выбрать этот столбец для маскирования, установите флажок рядом с этим столбцом и выберите функцию маскирования одного значения. Затем нажмите на ссылку Configure….

 

Рисунок 7: Спецификация одного значения

На экране спецификации одного значения введите 123 в поле Value. Указав это, столбец SecurityCode будет заменен статическим значением 123 в каждой строке таблицы CreditCard. Теперь, когда критерии статической маскировки для таблицы CreditCard определены, пришло время перейти и указать критерии маскировки для таблицы Client.

Чтобы замаскировать таблицу Client , сначала отобразите столбцы. На рисунке 8 показано, что отображается.

 

Рисунок 8: Столбцы таблицы Client

На рисунке 8 вы можете увидеть все столбцы в таблице Client. Установите флажок рядом с каждым столбцом, который должен быть замаскирован, как указано в таблице 1, а затем выберите соответствующие критерии маскирования для каждого столбца, как показано на рисунке 9.

 

Рисунок 9: Определение критериев маскировки для таблицы Client

На рисунке 9 показаны все столбцы и тип маскирования для каждого столбца. Как видите, элементы Shuffle и String Composite поддерживают дополнительные спецификации маскирования.

Чтобы настроить спецификацию конфигурации маскирования в произвольном порядке для столбца Name, щелкните гиперссылку Configure….. После нажатия появится окно:

 

Рисунок 10: Конфигурация маскирования для столбца Name.

Как вы можете видеть, у критериев маскирования в случайном порядке есть только один параметр конфигурации, который может быть задан, а именно: Maintain NULL positions - поддерживать позиции NULL или нет. Помните, что критерии Shuffle будут использовать все значения столбцов для маскировки, но будут перемешивать значения случайным образом среди строк. Следовательно, при выборе Maintain NULL positions все пустые значения в столбце Name не будут перемещаться в разные строки. Если поле не выбрано, значения NULL можно перемещать. Для этого столбца оставьте поле не отмеченным.

Столбец BirthDate будет замаскирован с использованием спецификации маскирования NULL. Эта спецификация заменит все значения столбца BirthDate на NULL в клонированной базе данных.

Критерии маскирования группового перемешивания будут использоваться для столбцов AddrLine, ZipCode и City. Перестановка группы похожа на опцию shuffle, но вместо перетасовки каждого значения столбца независимо от других, она случайным образом перемешивает все значения сгруппированных столбцов вместе в клонированных строках базы данных. В группе Shuffle также есть опция Configure… . На рисунке 11 показана опция при нажатии.

 

Рисунок 11: Опция настройки группового перемешивания AddrLine

Единственный вариант конфигурации - назвать группу случайных чисел, которая по умолчанию является group1. Это имя группы в случайном порядке будет использоваться для идентификации всех столбцов, которые будут перемешаны вместе. Критерии маскировки Shuffle Group устанавливаются в трех столбцах адреса в таблице Client. По умолчанию все эти три столбца были определены с Shuffle group name group1. Поэтому атрибуты адреса в каждой строке будут перемешиваться вместе, что гарантирует, что атрибуты адреса останутся вместе, когда они перемешиваются и случайным образом ассоциируются с новыми строками. Если вы хотите иметь разные наборы для столбцов, сгруппированных и перемешанных, все, что вам нужно сделать, это определить более одного Shuffle group name.

Последний столбец для маскировки - это столбец EmailAddr. Для этого столбца выберите критерий маскирования составными строками. Этот критерий маскирования используется для создания правила маскирования, при котором домен электронной почты остается тем же, но для части адреса до знака @ устанавливается случайный шаблон. Чтобы создать это правило маскирования, щелкните гиперссылку Configure… рядом со столбцом адреса электронной почты. Затем установите флажок Advanced и, наконец, выберите гиперссылку Email Address (keep domain)  в нижней части окна шаблона, как показано на рисунке 12.

 

Рисунок 12: Настройка маскирования адреса электронной почты

На рисунке 13 показано, что поля Pattern и Source Regex были заполнены выражениями после нажатия на гиперссылку примера электронной почты. Эти выражения определяют, что домен адреса электронной почты будет сохранен, когда этот столбец будет замаскирован, но часть адреса электронной почты до знака @ будет заменена сгенерированным значением.

 

Рисунок 13: Правило маскирования электронной почты

На этом этапе все требования к маскировке были определены, и вы можете перейти к шагу 2.

Шаг 2: Определите место резервного копирования клонов

На этом этапе вы должны указать место, где вы хотите, чтобы SQL Server сохранял резервную копию базы данных, которую вы пытаетесь замаскировать. Эта резервная копия базы данных будет использоваться в процессе клонирования, но не содержит замаскированных данных. В моем случае я сохраню свою резервную копию в каталоге C:\ temp, как показано на рисунке 14.

 

Рисунок 14: Расположение файла резервной копии клона

Шаг 3: Определите имя базы данных в маске

На этом этапе вы должны определить имя клонированной базы данных. На рисунке 15 вы можете видеть, что я назвал мою клонированную базу данных StaticMaskingDemo_Masked.

 

Рисунок 15: Маскированное имя базы данных

На данный момент было настроено следующее:

  • База данных и столбцы, которые будут замаскированы.
  • Правила маскировки для каждого столбца, который будет маскироваться.
  • Расположение и имя места хранения резервной копии маскируемой базы данных.
  • Название замаскированной базы данных.

Это имело много своих моментов, заняло много кликов и набора текста, чтобы определить несколько маскирующих спецификаций. Предположим, у вас есть несколько таблиц и столбцов, которые необходимо замаскировать. Если бы это было так, потребовалось бы очень много времени, чтобы использовать метод GUI для определения требования маскировки. На этом этапе вы можете сохранить конфигурацию маскирования, нажав на кнопку Save Config, как показано на рисунке 16.

 

Рисунок 16. Сохранение маскирующей конфигурации.

Когда вы нажмете на эту кнопку, вам будет предложено место для хранения XML, который составляет конфигурацию маскирования. В этом случае я сохранил XML в C:\temp\StaticMaskingDemo_Masked.xml. Сохранение конфигурации позволит легко изменить критерии маскирования в будущем, если это необходимо.

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

Рисунок 17: Маскировка завершена!

Взглянув на текст на рисунке 17, вы увидите, что процесс клонирования фактически развернул замаскированную базу данных. Моя клонированная база данных была сохранена в том же экземпляре, что и клонированные базы данных. Кроме того, файл резервной копии, который содержит замаскированную базу данных, был создан в ранее указанном месте. Эта резервная копия может быть использована для восстановления маскированной базы данных в другой экземпляр SQL Server.

Проверка замаскированной базы данных

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

 

-- Original Client Data

SELECT [ID],[CreditCardID],[ClientName],[BirthDate]

     ,[EmailAddr],[AddrLine],[City],[PostalCode]

 FROM [StaticMaskingDemo].[dbo].[Client];

-- Cloned Client Data

SELECT [ID],[CreditCardID],[ClientName],[BirthDate]

     ,[EmailAddr],[AddrLine],[City],[PostalCode]

 FROM [StaticMaskingDemo_Masked].[dbo].[Client];

-- Original CreditCard Data

SELECT [ID],[CreditCardNum],[SecurityCode]

 FROM [StaticMaskingDemo].[dbo].[CreditCard];

-- Cloned Cloned CreditCard Data

SELECT [ID],[CreditCardNum],[SecurityCode]

 FROM [StaticMaskingDemo_Masked].[dbo].[CreditCard];

 

Сценарий 2: код TSQL для отображения данных из обеих баз данных

Код в сценарии 2 возвращает вывод, аналогичный показанному на рисунке 8.

 

Рисунок 18. Просмотр исходных и клонированных данных

Если вы посмотрите на замаскированные данные (выделенные синим цветом) на рисунке 18 и сравните их с исходными данными (не выделенными), вы увидите, что данные были замаскированы в клонированной базе данных точно так же, как указано.

XML для поддержки статической маскировки данных

В предыдущем разделе вы сохранили конфигурацию XML для требований маскировки. Конфигурация была сохранена в файле XML с именем: C:\temp\StaticMaskingDemo_Masked.xml. Когда вы открываете этот файл, он выглядит как текст в сценарии 3.

  

Сценарий 3: статическая маскировка данных XML

Изучив этот XML-файл, вы увидите, что все маскированные столбцы идентифицированы в XML. Каждый столбец содержит требования маскировки, которые были определены.

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

После создания или изменения этого XML вы можете загрузить в SSMS. Чтобы загрузить этот XML-файл, просто нажмите кнопку Load Config, как показано на рисунке 19.

 

Рисунок 19: Загрузка критериев маскирования для файла XML

Ограничения

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

  • Не поддерживает базы данных с временными таблицами.
  • Не маскирует таблицы, оптимизированные для памяти.
  • Не маскирует вычисляемые столбцы или столбцы идентификаторов.
  • Не поддерживает типы данных геометрии или географии.
  • Не обновляет статистику гистограммы, поэтому клонированная база данных может по-прежнему содержать ваши конфиденциальные данные в статистике. Чтобы решить эту проблему, все, что вам нужно сделать, это запустить функцию обновления статистики в новой базе данных после завершения процесса маскирования.
  • В случае сбоя маскирующей операции может быть создана замаскированная база данных, содержащая немаскированные данные.
  • Немаскированные данные все еще могут храниться на нераспределенных страницах данных для локальных баз данных SQL Server, и поэтому кто-то может использовать шестнадцатеричный редактор для просмотра этих немаскированных значений.

Для получения дополнительной информации об этих исключениях, пожалуйста, обратитесь к этой документации.

Наблюдения

При изучении и тестировании маскирования статической базы данных я сделал следующие наблюдения:

  • Хорошо, что вам не нужна база данных на SQL Server 2019, чтобы использовать функцию статической маскировки данных. Единственное требование - наличие предварительного просмотра SSMS 18 версии 5 или выше, а база данных должна быть на SQL Server 2012 или выше.
  • Когда вы клонируете или маскируете базу данных, клонированная база данных создается в том же экземпляре, что и исходная база данных. Бывают случаи, когда вы не сможете клонировать свою производственную базу данных на экземпляре, где она живет. Поэтому я бы предпочел диалоговое окно, которое позволило бы мне поместить эту базу данных в экземпляр, отличный от экземпляра, в котором находится исходная база данных.
  • ПОЛНАЯ резервная копия вашей исходной базы данных создается в процессе клонирования или маскирования. Эта резервная копия не является резервной копией только для копирования, поэтому она может повлиять на вашу обычную цепочку резервных копий. Думаю, я бы предпочел, чтобы эта резервная копия была резервной копией только для копирования, чтобы она не мешала вашей обычной процедуре резервного копирования клонированной или маскированной базы данных. Я сообщил об этом в Microsoft, и они сообщили мне, что это будет изменено в будущем выпуске. Создать сложные правила маскирования легко, если вы знакомы с выражениями Regex. Даже если вы не разбираетесь в выражениях Regex, у инструмента есть примеры, которые помогут вам начать и построить выражения Regex. Наличие этих примеров несколько облегчает разработку критериев маскировки, даже если человек не владеет хорошо Regex.
  • Использование инструмента с графическим интерфейсом для задания требований маскировки может быть немного громоздким. Поэтому, возможно, стоит рассмотреть вопрос о создании требования маскирования с использованием файла XML. Использование XML-файлов для определения требований к маскировке делает процесс клонирования или маскирования намного более повторяемым и облегчает ввод большого количества требований к маскированию.
  • На момент написания этой статьи я не мог найти способ автоматизировать процесс статической маскировки. Надеемся, что к тому времени, когда эта функция будет полностью запущена, команда по статическому маскированию данных предоставит вам возможность автоматизировать процесс маскирования с помощью сценария.

Легкое сокрытие конфиденциальных данных

Всегда было сложно очистить производственные данные при переносе базы данных в непроизводственную среду. С новой функцией статического маскирования данных, представленной в SSMS версии 18 Preview 5, администратор базы данных или разработчик теперь могут легко очистить свои конфиденциальные данные с помощью клонирования производственных баз данных в непроизводственных средах. Все, что вам нужно, это указать некоторые критерии маскирования вручную или с помощью файла XML, а затем запустить исходную базу данных в процессе маскирования или клонирования. Эта новая функция в SSMS поддерживает маскирование базы данных при условии, что база данных находится на SQL Server 2012 или выше. Все администраторы баз данных и разработчики, которые обеспокоены безопасностью, должны использовать эту функцию статического маскирования данных каждый раз, когда они клонируют производственную базу данных для непроизводственной среды.

No Comments

Add a Comment