Разработка
NTA
227

Как защитить конфиденциальную информацию организации от несанкционированного доступа?

Для хранения больших выгрузок из каких-либо источников данных и в дальнейшем для проверки гипотез при работе с этими данными применяется СУБД SQL Server. В таблицах баз данных могут хранится, в том числе, и персональные данные клиентов (физических лиц) или сотрудников компании, различная конфиденциальная информация организации, доступ к которой может быть защищен с помощью маскирования (обфускации) путем замены исходных данных фиктивными или наборами произвольных символов. И такое маскирование можно применить не только для того, чтобы выполнять требования нормативных документов компании, но и, таким образом, избежать «утечки» информации.

В закладки

Рассмотрим возможности использования динамического маскирования данных (DDM) SQL Server, позволяющего ограничить доступ определенным категориям пользователей к конфиденциальной информации, находящейся в базах данных.

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

DDM строится на использовании T-SQL команд и определяет защищаемые данные по полям, настраивает подходящую функцию маскирования и скрывает данные от запросов. Это не требует кодирования, шифрования или внесения изменений в реальные данные, хранящиеся на жестком диске.

Что необходимо предварительно сделать?

Перейдем к примерам.

Допустим, в базе данных имеется таблица employees со списком сотрудников компании. В этой таблице, как видно из рисунка ниже, присутствуют данные об Имени, Фамилии сотрудника, его Дате рождения, зарплате, адресе электронной почты (все данные в данной таблице вымышленные).

Предположим, необходимо ограничить видимость данных при запросе их из этой таблицы для определенных пользователей базы данных. Для демонстрации этого создадим предварительно такого «демо-пользователя».

create user demoUser without login; grant select on employees to demoUser;

Начнем с маскирования поля firstName.

Для этого используем функцию default, которая маскирует данные в соответствии с типом данных поля. Например, для строковых типов данных используется значение ХХХХ, для поля с одним из числовых типов данных будет использоваться нулевое значение.

Выполним скрипт для этой операции:

alter table employees alter column firstName nvarchar(255) masked with (function = 'default()');

Теперь, если «демо-пользователь» запросит данные из таблицы employees,

execute as user = 'demoUser'; select * from employees; revert;

то он получит следующий результат:

Таким образом, изменились только данные, которые предоставляются для выбранного пользователя ‘demoUser‘. В самой базе данных изменений не произошло.

Далее продолжая маскировать данные проделаем эту операцию для поля электронной почты сотрудника компании — Email. Используем для этих целей функцию маскирования email, которая показывает один лишь первый символ адреса электронной почты и маскирует остальную часть адреса — nXXX@XXXX.ru.

alter table employees alter column Email nvarchar(255) masked with (function = 'email()');

После выполнения этого скрипта, если использовать учетную запись ‘demoUser‘ для запроса данных из таблицы employees, то результат будет следующим:

execute as user = 'demoUser'; select * from employees; revert;

Следующее поле, данные которого будем маскировать – зарплата сотрудника. В таблице employees – это поле Salary.

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

alter table employees alter column Salary int masked with (function='random(1,9)');

В итоге demoUser после запуска скрипта

execute as user = 'demoUser'; select * from employees; revert;

получит следующий результат:

Обратите внимание на то, что этот метод приводит к замене имеющихся значений в поле Salary случайными значениями в пределах определенного диапазона от 1 до 9, который указан в функции random.

А теперь приведу пример того, как можно выполнить маскирование данных поля lastName, используя настройки функции сustom, в которых указывается маска для данных поля lastName (отображаются 3 первые и 3 последние буквы фамилии).

alter table employees alter column lasttName nvarchar(255) masked with (function= 'partial(3,"xxxx",3)');

После этого, выполнив запрос данных из таблицы employees от имени demoUser, получаем ответ, представленный на следующем рисунке:

Если учетной записи demoUser предоставить доступ unmask к базе данных, то можно видеть все записи в таблице employees без маскирования.

grant unmask to demoUser execute as user = 'demoUser'; select * from employees; revert;

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

revoke unmask to demoUser;

Если требуется отменить маскирование какого-либо поля таблицы employees, например, поля firstName, чтобы demoUser мог видеть данные этого поля в результатах запроса «открытыми», то выполним следующий скрипт

alter table employees alter column firstName drop masked

и для проверки запросим данные от имени demoUser:

execute as user = 'demoUser'; select * from employees; revert;

Как видно из приведенных примеров, динамическое маскирование данных таблицы employees приводило к тому, что при запросе данных из этой таблицы от имени пользователя, которому предоставлен определенный уровень доступа, выполнялась защита данных выбранных полей (firstName, lastName, Email, Salary) путем маскирования данных в результатах запроса. Изменения в данные, хранящиеся на диске, не вносились.

Лайфхаки IT, проверенные решения для стандартных задач
{ "author_name": "NTA", "author_type": "editor", "tags": [], "comments": 2, "likes": 0, "favorites": 15, "is_advertisement": false, "subsite_label": "dev", "id": 171142, "is_wide": true, "is_ugc": false, "date": "Tue, 27 Oct 2020 23:28:26 +0300", "is_special": false }
Объявление на vc.ru Отключить рекламу
Маркетинг
Как бизнесу заработать в соцсетях в 2020 году: полноценное руководство с прогнозами и примерами
Пошаговая рабочая стратегия продвижения бизнеса в соцсетях с медиапланом и примерами внедрения от директора «Студии…
0
2 комментария
Популярные
По порядку
0

Кажется маскировка имейлов ломает констрейн на уникальность. Это можно починить, не прибегая к кастомным маскам?

Ответить
0

Добрый день! Если в результате вывода важна уникальность email, то думаем, что надо использовать частичные маски.

Ответить

Комментарии

null