Поделиться через


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

Применимо:База данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse Analytics (только выделенные пулы SQL)База данных SQL в Fabric

База данных SQL Azure, база данных SQL в Microsoft Fabric, Управляемый экземпляр SQL Azure и Azure Synapse Analytics поддерживают динамическое маскирование данных (DDM). Динамическое маскирование данных ограничивает возможность раскрытия конфиденциальных данных, маскируя их для обычных пользователей.

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

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

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

В базе данных SQL Azure настраивается политика динамического маскирования данных в портале Azure, выбрав панель Динамического маскирования данных в разделе Безопасность на панели конфигурации базы данных SQL.

Эту функцию нельзя задать с помощью портала Azure для управляемого экземпляра SQL или базы данных SQL в Fabric. Вместо этого используйте Transact-SQL (T-SQL), как в примере детализации разрешений в этой статье. Дополнительные сведения см. в разделе "Динамическое маскирование данных".

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

  • Пользователи SQL, исключенные из маскирования: Набор пользователей SQL, который может включать удостоверения из Microsoft Entra ID, получающих немаскированные данные в результатах 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
    Эл. почта Метод маскирования, который открывает первую букву и заменяет домен на XXX.com, используя строковую константу в качестве префикса в формате электронного адреса.

    aXX@XXXX.com
    Случайное число Метод маскирования, который формирует случайное число в соответствии с выбранными границами и типами фактических данных. Если установленные границы равны, то функция маскирования будет постоянным числом.

    Снимок экрана: метод маскирования для формирования случайного числа.
    Пользовательский текст Метод маскирования, при котором видны первая и последняя буквы и добавляется пользовательская строка заполнения в середине. Если исходная строка короче видимых префикса и суффикса, то будет использоваться только строка заполнения.

    prefix[padding]suffix
    Снимок экрана: панель навигации.
    Дата и время Включает детализацию маскирования для столбцов даты и времени, а именно datetime, datetime2, date, time, datetimeoffset и smalldatetime. Вы можете маскировать определенные компоненты, такие как год (datetime("Y")), месяц (datetime("M")), день (datetime("D")), час (datetime("h")), минута (datetime("m")) или секунда (datetime("s")). Эта функция применяется с помощью T-SQL.

    Рассмотрим пример.

    - Маска года: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Месяц маски: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Маска минуты: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

Подсистема рекомендаций 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 разрешения:

    • Предоставьте разрешение UNMASKна уровень ServiceAttendant столбца:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Предоставьте разрешение уровня таблицы UNMASK для ServiceLead:

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Предоставьте разрешение на уровень схемы UNMASKServiceManager:

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Предоставьте разрешение UNMASK на уровне базы данных 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;