MSSQL.DataMask

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:39, 13 октября 2020.
MSSQL.DataMask
Разработчики: Microsoft Sybase Ashtone-Tate
Операционная система: UNIX
Веб-сайт Шаблон:Uhttps://www.microsoft.com/en-us/sql-server/sql-server-2019

MSSQL.DataMask – это функция безопасности, представленная в SQL Server 2016, которая используется для защиты конфиденциальных данных от просмотра неавторизованными пользователями путем маскирования данных в наборе результатов без внесения каких-либо изменений в данные, хранящиеся на диске.

Динамическое маскирование данных

Динамическое маскирование данных (DDM) ограничивает возможность раскрытия конфиденциальных данных за счет маскирования этих данных для непривилегированных пользователей. Оно позволяет значительно упростить проектирование и написание кода для системы безопасности в приложении. Примером необходимости такой функции является предоставление разработчикам приложений доступа к производственным данным для устранения неполадок и предотвращение одновременного доступа к конфиденциальным. Другой пример - сотрудник центра обработки вызовов, который будет получать доступ к информации о клиенте, чтобы помочь ему в его запросе, но важные финансовые данные, такие как номер банковского счета или полный номер кредитной карты, будут от него скрыты. Динамическое маскирование данных, также известное как DDM, представляет собой простую функцию безопасности, которая может быть полностью построена с помощью знакомых нам команд T-SQL, проста в использовании и гибка в разработке. Этот метод защиты данных позволяет вам определять ваши «конфиденциальные» данные по полю, чтобы настроить подходящую функцию маскирования, чтобы скрыть их от запросов. Эта функция не требует усилий по кодированию со стороны приложения, шифрования или внесения каких-либо изменений в реальные данные, хранящиеся на диск Динамическое маскирование данных не сможет помешать пользователям подключиться к базе данных напрямую и выполнить запросы для получения фрагментов конфиденциальных данных. Динамическое маскирование данных дополняет другие функции безопасности SQL Server (аудит, шифрование, безопасность на уровне строк...). Настоятельно рекомендуется использовать маскирование вместе с этими функциями для лучшей защиты конфиденциальных данных в базе данных. Динамическое маскирование данных доступно в SQL Server 2016 (13.x); и База данных SQL Azureи настраивается с помощью команд Transact-SQL . Для реализации DDM сначала необходимо указать конфиденциальные данные, роль для их маскирования и указать назначенных привилегированных пользователей, которые имеют доступ к этим конфиденциальным данным. Следующим шагом является выбор и реализация функции маскирования.

Функции маскировки

Существует четыре основных типа функций маскирования, которые можно настроить в динамическом маскировании данных, которые мы кратко представим здесь и используем в демонстрации позже. Первый тип - это функция по умолчанию, которая маскирует данные в соответствии с типом данных поля; если тип данных поля - binary, varbinary или image, для маскировки этого поля будет использоваться один байт двоичного значения 0. Для типов данных даты и времени значение 01.01.1900 00: 00: 00.0000000 будет использоваться для маскировки этого поля даты. Если тип данных замаскированного поля является одним из числовых типов данных, нулевое значение будет использоваться для маскировки этого поля. Для строковых типов данных значение XXXX будет использоваться для маскировки этого поля. Если длина поля меньше 4 символов, меньшее количество крестиков будет использоваться для маскировки его значения. Второй метод маскирования - это функция электронной почты, которая используется для маскировки полей, в которых хранится адрес электронной почты. Функция электронной почты показывает только первый символ адреса электронной почты и маскирует остальную часть электронной почты, так же, как aXXX@XXXX.com. Функция случайного маскирования используется для маскировки любого числового типа данных путем замены исходного значения случайным значением в пределах диапазона, указанного в этой функции. Последний тип маскирования - это функция Custom , которая позволяет вам определить вашу собственную маску для указанного поля, выставив первую и последнюю буквы, определенные префиксом и суффиксом, и добавить отступ, который будет отображаться в середине в виде префикса [значение заполнения], суффикса, учитывая, что часть префикса или суффикса не будет отображаться, если исходное значение поля слишком короткое, чтобы его можно было замаскировать. Как и любая функция в SQL Server, существует ряд ограничений для функции динамического маскирования данных, когда вы не можете определить DDM для зашифрованного столбца, столбца с FILESTREAM, COLUMN_SET или разреженного столбца, который является частью Column_Set, Computed column. или ключевой столбец в FULLTEXT индексе. Если маскируемый столбец является частью индекса или любого типа зависимостей, мы должны отбросить эту зависимость, настроить DDM для этого столбца, а затем снова создать зависимость. Динамическое маскирование данных не помешает привилегированным пользователям изменять замаскированный столбец или изменять замаскированные данные.

Разрешения

Для создания таблицы с динамическим маскированием данных не требуется специальных разрешений — только стандартные разрешения CREATE TABLE и ALTER для схемы. Для добавления, замены или удаления маски столбца требуется разрешение ALTER ANY MASK и разрешение ALTER для таблицы. Разрешение ALTER ANY MASK может быть выдано директору по безопасности. Пользователи с разрешением SELECT для таблицы могут просматривать данные таблицы. В столбцах, определенных как маскированные, будут отображаться маскированные данные. Предоставьте разрешение UNMASK для пользователя, чтобы он смог получать немаскированные данные из столбцов, для которых определено маскирование. Разрешение CONTROL для базы данных включает разрешения ALTER ANY MASK и UNMASK .

Ограничения

Правило маскирования невозможно определить для следующих типов столбцов:

  • Зашифрованные столбцы (постоянное шифрование)
  • FILESTREAM
  • Набор столбцов (COLUMN_SET) или разреженный столбец, который является частью набора столбцов.
  • Маскирование невозможно настроить для вычисляемого столбца, но если вычисляемый столбец зависит от столбца с маской (MASK), то вычисляемый столбец будет возвращать маскированные данные.
  • Столбец с маскированием данных не может использоваться в качестве ключа для полнотекстового (FULLTEXT) индекса.

Для пользователей без разрешения UNMASK устаревшие инструкции READTEXT, UPDATETEXTи WRITETEXT будут работать неправильно для столбца, для которого настроено динамическое маскирование данных. Добавление маски динамических данных реализовано как изменение схемы в базовой таблице и поэтому невозможно для столбца с зависимостями. Чтобы обойти это ограничение, можно сначала удалить зависимость, далее добавить маску динамических данных и затем повторно создать зависимость. Например, если зависимость обусловлена индексом, зависимым от этого столбца, можно удалить индекс, добавить маску и затем повторно создать зависимый индекс.

Примеры

Рекомендации и распространенные примеры

  • Создание маски для столбца не запрещает обновление этого столбца. Поэтому хотя при опросе маскированного столбца пользователи получают маскированные данные, те же пользователи могут обновлять данные, если у них есть разрешения на запись. Поэтому необходимо применить подходящую политику контроля доступа для ограничения разрешений на обновление.
  • Используйте SELECT INTO или INSERT INTO для копирования данных из маскированного столбца в результаты для другой таблицы в маскированных данных в целевой таблице.
  • Динамическое маскирование данных применяется при запуске импорта и экспорта SQL Server . Файл экспортированных данных для базы данных с маскированными столбцами будет содержать маскированные данные (при условии, что она была экспортирована пользователем без привилегий UNMASK ), а импортированная база данных будет содержать статически маскированные данные.

Запрос данных для маскированных столбцов

Используйте представление sys.masked_columns для запроса данных для столбцов таблицы, к которым применена функция маскирования. Это представление наследуется из представления sys.columns . Оно возвращает все столбцы в представлении sys.columns , а также столбцы is_masked и masking_function , указывающие, маскирован ли столбец, и если да, то какая функция маскирования определена. В этом представлении отображаются только столбцы, к которым применена функция маскирования.

SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function  
FROM sys.masked_columns AS c  
JOIN sys.tables AS tbl   
    ON c.[object_id] = tbl.[object_id]  
WHERE is_masked = 1;

Создание маски для динамического маскирования данных

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

CREATE TABLE Membership  
  (MemberID int IDENTITY PRIMARY KEY,  
   FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,  
   LastName varchar(100) NOT NULL,  
   Phone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,  
   Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);  
  
INSERT Membership (FirstName, LastName, Phone, Email) VALUES   
('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com'),  
('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co'),  
('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net');  
SELECT * FROM Membership;

Новый пользователь создается, и ему предоставляется разрешение SELECT для таблицы. Запросы, выполняемые как TestUser , возвращают маскированные данные.

CREATE USER TestUser WITHOUT LOGIN;  
GRANT SELECT ON Membership TO TestUser;  
  
EXECUTE AS USER = 'TestUser';  
SELECT * FROM Membership;  
REVERT;

Результат демонстрирует маски путем изменения данных из 1 Roberto Tamburello 555.123.4567 RTamburello@contoso.com

into 1 RXXXXXXX Tamburello xxxx RXXX@XXXX.com

Добавление или изменение маски для существующего столбца

Используйте инструкцию ALTER TABLE для добавления маски к существующему столбцу в таблице или для изменения маски для этого столбца. В следующем примере функция маскирования добавляется к столбцу LastName :

ALTER TABLE Membership  
ALTER COLUMN LastName ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)');

В следующем примере функция маскирования для столбца LastName изменяется:

ALTER TABLE Membership  
ALTER COLUMN LastName varchar(100) MASKED WITH (FUNCTION = 'default()');

Предоставление разрешений на просмотр немаскированных данных

Предоставление разрешения UNMASK позволяет TestUser просматривать немаскированные данные.

GRANT UNMASK TO TestUser;  
EXECUTE AS USER = 'TestUser';  
SELECT * FROM Membership;  
REVERT;   
  
-- Removing the UNMASK permission  
REVOKE UNMASK TO TestUser;

Удаление маски для динамического маскирования данных

Следующая инструкция удаляет маску для столбца LastName , созданного в предыдущем примере:

ALTER TABLE Membership   
ALTER COLUMN LastName DROP MASKED;


Источники