9.2.26

Детализация прав для динамического маскирования данных в SQL Server 2022

Автор: Leonard Lobel, Granular Dynamic Data Masking (DDM) Permissions in SQL Server 2022

Динамическое маскирование данных (Dynamic Data Masking, DDM) — это функция безопасности, представленная ещё в SQL Server 2016. Она скрывает конфиденциальные данные в результирующем наборе запроса, гарантируя, что неавторизованные пользователи не увидят информацию, к которой не должны иметь доступ. Подробное введение в эту функцию можно найти в моей старой статье в блоге.

Эта статья объясняет новые возможности DDM, добавленные в SQL Server 2022, а именно — детализированные разрешения.

Базовый пример: таблица с маскированными столбцами

Для начала создадим таблицу с несколькими маскированными столбцами и заполним её тестовыми данными:

-- Создание таблицы с маскированными столбцами
CREATE TABLE Membership(
    MemberId int IDENTITY PRIMARY KEY,
    FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(2, "...", 2)') NULL,
    LastName varchar(100) NOT NULL,
    Phone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,
    Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL,
    DiscountCode smallint MASKED WITH (FUNCTION = 'random(1, 100)') NULL)

-- Заполнение таблицы данными
INSERT INTO Membership VALUES
 ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10),
 ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5),
 ('Dan', 'Mu', '555.123.4569', 'ZMu@contoso.net', 50),
 ('Jane', 'Smith', '454.222.5920', 'Jane.Smith@hotmail.com', 40),
 ('Danny', 'Jones', '674.295.7950', 'Danny.Jones@hotmail.com', 30)

Чтобы пользователь мог видеть данные в четырёх маскированных столбцах (FirstName, Phone, Email, DiscountCode), ему должна быть предоставлена привилегия UNMASK. Однако до выхода SQL Server 2022 это было разрешением уровня базы данных в целом: пользователи, имеющие привилегию UNMASK, могут видеть каждый маскированный столбец в каждой таблице каждой схемы в базе данных.

Нововведение SQL Server 2022: детализированные разрешения DDM

Функция детализированных разрешений DDM, представленная в SQL Server 2022, — это значительное улучшение, устраняющее это серьёзное ограничение. Раньше SQL Server позволял предоставлять или отзывать привилегию UNMASK только на уровне базы данных, что ограничивало её гибкость и применение. Однако SQL Server 2022 расширяет эту возможность, предлагая столь необходимую детализацию. Теперь администраторы могут предоставлять или отзывать привилегии UNMASK на различных уровнях, обеспечивая точно настроенный контроль доступа, соответствующий конкретным требованиям безопасности.

Этот детализированный контроль может применяться на следующих уровнях:

  • Уровень базы данных: Как и раньше, влияет на все маскированные столбцы во всей базе данных.
  • Уровень схемы: Влияет на все таблицы в пределах конкретной схемы.
  • Уровень таблицы: Применяется ко всем столбцам в пределах конкретной таблицы.
  • Уровень столбца: Наиболее детализированный уровень, нацеленный на отдельные столбцы в таблице.

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

Пример: предоставление разрешения UNMASK на уровне столбца

Давайте установим разрешения UNMASK на уровне столбца для конкретного пользователя с именем ContactUser, которому поручено связаться с участниками. Для этого ему потребуется доступ к определённой информации, которая обычно маскируется, а именно к столбцам FirstName, Phone и Email в таблице Membership. Однако ему не требуется доступ к DiscountCode, который должен оставаться замаскированным:

-- Создание нового пользователя ContactUser без логина
CREATE USER ContactUser WITHOUT LOGIN

-- Предоставление привилегии SELECT на таблицу Membership пользователю ContactUser
GRANT SELECT ON Membership TO ContactUser

-- Предоставление привилегии UNMASK на конкретные столбцы пользователю ContactUser
GRANT UNMASK ON Membership(FirstName) TO ContactUser
GRANT UNMASK ON Membership(Phone) TO ContactUser
GRANT UNMASK ON Membership(Email) TO ContactUser

Выполнив приведённый выше код, мы создали пользователя ContactUser и предоставили ему привилегию SELECT на таблицу Membership. Затем мы пошли дальше, предоставив привилегию UNMASK, но специально и только для столбцов FirstName, Phone и Email. Это позволяет ContactUser просматривать эти обычно замаскированные столбцы в их не максированном состоянии, в то время как DiscountCode остаётся замаскированным, соблюдая принцип минимальных привилегий.

Проверка результата

Давайте посмотрим, что происходит, когда ContactUser обращается к таблице Membership, уделяя особое внимание столбцам, для которых ему были предоставлены привилегии UNMASK:

-- Вход под пользователем ContactUser для запроса к таблице Membership
EXECUTE AS USER = 'ContactUser'
SELECT * FROM Membership
REVERT

Выполнив приведённый выше код, вы заметите, что ContactUser может просматривать столбцы FirstName, Phone и Email без какого-либо маскирования благодаря детализированным привилегиям UNMASK, которые были явно предоставлены для этих столбцов. Однако DiscountCode остаётся замаскированным, его значения рандомизируются в диапазоне от 1 до 100, что демонстрирует эффект функции маскирования random(). Это поведение идеально соответствует нашему намерению для ContactUser, позволяя ему доступ к необходимой контактной информации, сохраняя при этом другие конфиденциальные данные, такие как коды скидок, замаскированными. Запустите код несколько раз, чтобы понаблюдать за динамическим маскированием в действии для столбца DiscountCode.

Предоставление разрешений на уровне схемы и таблицы

Детализированные разрешения DDM также могут быть предоставлены на уровне схемы и таблицы. Например:

-- Просмотр не максированных данных во всех столбцах всех таблиц в схеме dbo
GRANT UNMASK ON SCHEMA::dbo TO SomeUser

-- Просмотр не максированных данных во всех столбцах таблицы Membership в схеме dbo
GRANT UNMASK ON dbo.Membership TO SomeUser

Эта новая возможность в SQL Server 2022 значительно повышает полезность динамического маскирования данных. Приятного программирования!


Комментариев нет:

Отправить комментарий