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

Применимо: База данных 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

Политики маскирования данных

Правила маскирования данных

Настройка динамического маскирования данных для базы данных с помощью 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 предоставляет детальный способ контроля и ограничения несанкционированного доступа к данным, хранящимся в базе данных, и улучшения управления безопасностью данных.

  1. Создайте схему для хранения пользовательских таблиц:

    CREATE SCHEMA Data;
    GO
    
  2. Создайте таблицу с маскированных столбцов:

    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
    );
    
  3. Вставка примеров данных:

    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');
    
  4. Создайте схему для хранения таблиц служб:

    CREATE SCHEMA Service;
    GO
    
  5. Создайте таблицу служб с маскированных столбцов:

    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
    );
    
  6. Вставка примеров данных:

    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');
    
  7. Создайте разных пользователей в базе данных:

    CREATE USER ServiceAttendant WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceLead WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceManager WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceHead WITHOUT LOGIN;
    GO
    
  8. Предоставьте пользователям в базе данных разрешения на чтение:

    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;
    
  9. Предоставьте пользователям разные разрешения 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;
    
  10. Запрос данных в контексте пользователя ServiceAttendant:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Запрос данных в контексте пользователя ServiceLead:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Запрос данных в контексте пользователя ServiceManager:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Отправка запроса к данным в контексте пользователя ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Чтобы отозвать разрешения 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;