Динамическое маскирование данных
Применимо: База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics (только выделенные пулы SQL)
База данных SQL Azure, Управляемый экземпляр SQL Azure и Azure Synapse Analytics поддерживают динамическое маскирование данных (DDM). Динамическое маскирование данных ограничивает возможность раскрытия конфиденциальных данных, маскируя их для обычных пользователей.
Динамическое маскирование данных помогает предотвратить несанкционированный доступ к конфиденциальным данным, позволяя клиентам определить, сколько конфиденциальных данных можно выявить с минимальным воздействием на уровень приложений. Это функция безопасности на основе политики, которая скрывает конфиденциальные данные в результирующем наборе запроса по указанным полям базы данных, а данные в базе данных не изменяются.
Например, представитель центра обработки вызовов может определять вызывающее лицо, подтверждая несколько символов его адреса электронной почты, но полный адрес электронной почты не должен раскрываться этому представителю. Можно определить правило маскирования, маскирующее все адреса электронной почты в наборе результатов любого запроса. Еще один пример — защита персональных данных путем определения соответствующей маски. Разработчик может отправлять запросы в рабочие среды для устранения неполадок, не нарушая при этом нормативные правила.
Основные сведения о динамическом маскировании данных
Вы настроили политику динамического маскирования данных в портал Azure, выбрав область динамического маскирования данных в разделе "Безопасность" в области конфигурации База данных SQL. Эту функцию нельзя задать с помощью портала для Управляемый экземпляр SQL. Дополнительные сведения см. в разделе Dynamic Data Masking.
Политика динамического маскирования данных
- Пользователи SQL, исключенные из маскирования: набор пользователей SQL, которые могут включать удостоверения из идентификатора Microsoft Entra (ранее Azure Active Directory), которые получают незамеченные данные в результатах SQL-запроса. Пользователи с правами администратора сервера, администратора Microsoft Entra и роль db_owner могут просматривать исходные данные без маски. (Примечание. Это также относится к роли sysadmin в SQL Server)
- Правила маскирования: набор правил, определяющих назначенные поля для маскирования и используемую функцию маскирования. Задать такие поля можно с помощью имени схемы базы данных, имени таблицы и имени столбца.
- Функции маскирования: набор методов, которые управляют воздействием данных для различных сценариев.
Функция маскирования | Логика маскирования |
---|---|
По умолчанию | Полное маскирование в соответствии с типами данных предопределенных полей * Используйте XXXX (или меньше), если размер поля меньше 4 символов для строковых типов данных (nchar, ntext, nvarchar).* Используйте нулевое значение для числовых типов данных (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). * Используется 1900-01-01 для типов данных даты и времени (date, datetime2, datetime, datetimeoffset, smalldatetime, time).* Для sql_variant используется значение по умолчанию текущего типа. * Для XML используется документ <masked /> .* Используйте пустое значение для специальных типов данных (метка времени, таблица, HierarchyID, uniqueidentifier, binary, image, varbinary и пространственные типы). |
Кредитная карта | Метод маскирования, который предоставляет последние четыре цифры назначенных полей и добавляет строковую константу в качестве префикса в формате номера кредитной карты.XXXX-XXXX-XXXX-1234 |
Эл. почта | Метод маскирования, который предоставляет первую букву и домен, используя строковую константу в качестве префикса в формате электронного адреса.aXX@XXXX.com |
Случайное число | Метод маскирования, который формирует случайное число в соответствии с выбранными границами и типами фактических данных. Если установленные границы равны, то функция маскирования будет постоянным числом. |
Пользовательский текст | Метод маскирования, при котором видны первая и последняя буквы и добавляется пользовательская строка заполнения в середине. Если исходная строка короче открытых префикса и суффикса, то будет использоваться только строка заполнения.prefix[padding]suffix |
Рекомендуемые поля для маскирования
Подсистема рекомендаций DDM помечает определенные поля из базы данных как потенциально конфиденциальные поля, которые могут быть хорошими кандидатами для маскирования. В области динамического маскирования данных на портале отображаются рекомендуемые столбцы для базы данных. Выберите " Добавить маску " для одного или нескольких столбцов, а затем выберите соответствующую функцию маскирования и нажмите кнопку "Сохранить", чтобы применить маску для этих полей.
Управление динамическим маскированием данных с помощью T-SQL
- Чтобы создать маску динамических данных, см. статью Создание маски динамических данных.
- Чтобы добавить или изменить маску в существующем столбце, см. статью Добавление и изменение маски в существующем столбце.
- Чтобы предоставить разрешения на просмотр немаскированных данных, см. статью Предоставление разрешений на просмотр немаскированных данных.
- Чтобы удалить динамическую маску данных, см. статью Удаление динамической маски данных.
Настройка динамического маскирования данных для базы данных с помощью командлетов PowerShell
Политики маскирования данных
Правила маскирования данных
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Настройка динамического маскирования данных для базы данных с помощью REST API
Для программного управления политикой и правилами маскирования данных можно использовать REST API. Опубликованные REST API поддерживают следующие операции:
Политики маскирования данных
- Создать или обновить: создает или обновляет политику маскирования данных в базе данных.
- Получить: возвращает политику маскирования данных в базе данных.
Правила маскирования данных
- Создать или обновить: создает или обновляет правило маскирования данных в базе данных.
- Список по базе данных: возвращает список правил маскирования данных в базе данных.
Разрешения
Встроенные роли для настройки динамической маскировки данных:
Требуемые действия для использования динамической маскировки данных:
Чтение/запись:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Чтение:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Запись:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Дополнительные сведения о разрешениях при использовании динамической маскировки данных с помощью команды T-SQL см. в разделе "Разрешения".
Пример детализированного разрешения
Предотвратите неавторизованный доступ к конфиденциальным данным и обеспечьте контроль над ними путем их маскирования для несанкционированных пользователей на разных уровнях базы данных. Вы можете предоставить или отозвать разрешения UNMASK на уровне базы данных, на уровне схемы, на уровне таблицы или на уровне столбцов любому пользователю или роли базы данных. В сочетании с проверкой подлинности Microsoft Entra разрешения UNMASK можно управлять пользователями, группами и приложениями, которые хранятся в вашей среде Azure. Разрешение UNMASK предоставляет детальный способ контроля и ограничения несанкционированного доступа к данным, хранящимся в базе данных, и улучшения управления безопасностью данных.
Создайте схему для хранения пользовательских таблиц:
CREATE SCHEMA Data; GO
Создайте таблицу с маскированных столбцов:
CREATE TABLE Data.Membership ( MemberID INT IDENTITY(1, 1) NOT NULL, FirstName VARCHAR(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL, LastName VARCHAR(100) NOT NULL, Phone VARCHAR(12) MASKED WITH (FUNCTION = 'default()') NULL, Email VARCHAR(100) MASKED WITH (FUNCTION = 'email()') NOT NULL, DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL, BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL );
Вставка примеров данных:
INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay) VALUES ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'), ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'), ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'), ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');
Создайте схему для хранения таблиц служб:
CREATE SCHEMA Service; GO
Создайте таблицу служб с маскированных столбцов:
CREATE TABLE Service.Feedback ( MemberID INT IDENTITY(1, 1) NOT NULL, Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL, Rating INT MASKED WITH (FUNCTION = 'default()'), Received_On DATETIME );
Вставка примеров данных:
INSERT INTO Service.Feedback (Feedback, Rating, Received_On) VALUES ('Good', 4, '2022-01-25 11:25:05'), ('Excellent', 5, '2021-12-22 08:10:07'), ('Average', 3, '2021-09-15 09:00:00');
Создайте разных пользователей в базе данных:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GO
Предоставьте пользователям в базе данных разрешения на чтение:
ALTER ROLE db_datareader ADD MEMBER ServiceAttendant; ALTER ROLE db_datareader ADD MEMBER ServiceLead; ALTER ROLE db_datareader ADD MEMBER ServiceManager; ALTER ROLE db_datareader ADD MEMBER ServiceHead;
Предоставьте пользователям разные разрешения UNMASK:
--Grant column level UNMASK permission to ServiceAttendant GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant; -- Grant table level UNMASK permission to ServiceLead GRANT UNMASK ON Data.Membership TO ServiceLead; -- Grant schema level UNMASK permission to ServiceManager GRANT UNMASK ON SCHEMA::Data TO ServiceManager; GRANT UNMASK ON SCHEMA::Service TO ServiceManager; --Grant database level UNMASK permission to ServiceHead; GRANT UNMASK TO ServiceHead;
Запрос данных в контексте пользователя
ServiceAttendant
:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Запрос данных в контексте пользователя
ServiceLead
:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Запрос данных в контексте пользователя
ServiceManager
:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Отправка запроса к данным в контексте пользователя
ServiceHead
EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Чтобы отозвать разрешения UNMASK, используйте следующие инструкции T-SQL:
REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant; REVOKE UNMASK ON Data.Membership FROM ServiceLead; REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager; REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager; REVOKE UNMASK FROM ServiceHead;