Динамическое маскирование данных
Применяется к:Azure SQL Database
Azure Sql Managed Instance
Azure Synapse Analytics (только выделенные пулы SQL)
Динамическое маскирование данных поддерживается в Базе данных SQL Azure, Управляемом экземпляре SQL Azure и Azure Synapse Analytics. Динамическое маскирование данных ограничивает возможность раскрытия конфиденциальных данных, маскируя их для обычных пользователей.
Динамическое маскирование данных помогает предотвратить несанкционированный доступ к конфиденциальным данным, позволяя клиентам определить, сколько конфиденциальных данных можно выявить с минимальным воздействием на уровень приложений. Это функция безопасности на основе политики, которая скрывает конфиденциальные данные в результирующем наборе запроса по указанным полям базы данных, а данные в базе данных не изменяются.
Например, представитель центра обработки вызовов может определять вызывающее лицо, подтверждая несколько символов его адреса электронной почты, но полный адрес электронной почты не должен раскрываться этому представителю. Можно определить правило маскирования, маскирующее все адреса электронной почты в наборе результатов любого запроса. Еще один пример — защита персональных данных путем определения соответствующей маски. Разработчик может отправлять запросы в рабочие среды для устранения неполадок, не нарушая при этом нормативные правила.
Основные сведения о динамическом маскировании данных
Настройка политики динамического маскирования данных на портале Azure осуществляется путем выбора операции Динамическое маскирование данных в разделе Безопасность на панели конфигурации базы данных SQL. Эту функцию нельзя задать с помощью портала для управляемого экземпляра SQL. Дополнительные сведения см. в разделе Dynamic Data Masking.
Политика динамического маскирования данных
- Пользователи SQL, исключенные из маскирования: набор пользователей SQL или удостоверений Azure AD, которые получают незамеченные данные в результатах SQL-запроса. Пользователи с правами администратора сервера, администратора Azure AD или роли 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 на уровне базы данных, уровне схемы, на уровне таблицы или на уровне столбцов пользователю базы данных, удостоверению Azure AD, группе Azure AD или роли базы данных. Использование разрешения UNMASK предоставляет более точный контроль над доступом к данным в базе данных и улучшает управление безопасностью данных.
Создайте схему для хранения пользовательских таблиц:
CREATE SCHEMA Data; GO
Создайте таблицу с маскированных столбцов:
CREATE TABLE Data.Membership ( MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED, 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 PRIMARY KEY CLUSTERED, 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;
См. также
- Динамическое маскирование данных для SQL Server.
- Выпуск о предоставлении данных Детализированные разрешения для динамического маскирования данных Azure SQL на канале 9.