Всем привет! Меня зовут Светлана Анохина, я младший бизнес-партнёр по информационной безопасности в Ozon. Несмотря на небольшой стаж, опыт работы у меня довольно разносторонний, ведь моя роль предполагает участие практически во всех аспектах безопасности (если интересно, кто такие бизнес-партнёры по ИБ, то рекомендую почитать статьи моих коллег Даши или Максима на эту тему).

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

На первых этапах погружения в профессию, когда я была студенткой и только начинала разбираться в защите данных, проблемы безопасности казались мне чем-то далёким и почти гипотетическим. Мысль о том, что личная информация — адрес, электронная почта или данные банковской карты — может попасть в чужие руки, не вызывала у меня особого беспокойства. Утечка данных? Да, неприятно, но ведь это происходит где-то далеко и вряд ли касается меня напрямую.

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

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

За время своей работы в e-commerce-компаниях я собрала некоторый перечень подходов и инструментов защиты, которые реализую в своём направлении. Сегодня я хочу рассказать о маскировании вам, моим коллегам, которые так же, как и я, стремятся сделать данные безопасными, а жизнь пользователей — спокойной.

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

Итак, нам известно, что утечка даже небольшой части конфиденциальных данных может привести к серьёзным последствиям: потере репутации компании, крупным штрафам от регуляторов и многомиллионным убыткам. Причины таких инцидентов могут быть разными: от целенаправленных атак хакеров до ошибок сотрудников или недостаточной защиты тестовых сред. Как же мы можем защититься от утечек?

Защита данных — это многослойный процесс, где каждая мера важна.

Начнём с базовых методов.

Первое, что приходит на ум, — это шифрование, использование сложных паролей и ограничение доступа извне. Это фундамент безопасности, своеобразная «основа», без которой нельзя строить систему защиты.

Следующий этап — мониторинг: кто заходит в базу, что делает, какие данные запрашивает. Логирование здесь — инструмент номер один. Оно позволяет не только выявлять подозрительные активности, но и разбираться в причинах возможных инцидентов. Кроме того, важным этапом является защита на сетевом уровне: настройка брандмауэров, использование VPN для защищённого подключения, ограничение IP-адресов, с которых можно получить доступ к системе. Всё это создаёт дополнительный барьер для злоумышленников.

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

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

Почему этот метод так эффективен?

Во-первых, даже если данные утекут, они будут бесполезны для злоумышленников. Во-вторых, это помогает компаниям соблюдать GDPR или ФЗ-152, которые требуют строгого ограничения и минимизации доступа к персональным данным. И, что немаловажно, процесс маскирования довольно просто внедрить, если подойти к нему правильно. Важно лишь, чтобы замаскированные данные могли использоваться для тестирования или анализа. В большинстве случаев этот метод применяется для защиты персональных данных и корпоративных секретов.

Существует множество алгоритмов маскирования, каждый из которых подходит для своих задач.

1.     Начнём с самого популярного — подмена значений. Здесь всё просто: берём реальные данные и заменяем их чем-то похожим. Например, вместо имени «Иван Иванов» подставляем «Алексей Смирнов». Формат сохраняется, данные выглядят правдоподобно, и для тестирования это идеальный вариант. Но здесь стоит учитывать, что при подмене есть вероятность случайно «попасть» в реальные данные другого человека и начать нелегитимно их обрабатывать. Можно минимизировать этот риск, используя вымышленные имена и фамилии, генерируя псевдонимы, частично модифицируя имена «Иван» -> «Ивак» или совмещая этот алгоритм с генерацией синтетических данных.

2.     Дальше идёт обфускация или, проще говоря, зашифровывание данных таким образом, чтобы они стали нечитаемыми. Например, ваш телефон «123-456-7890» превращается в «XXX-XXX-7890» или адрес электронной почты превращается в email@domen.ru. Отличный способ скрыть чувствительные данные, при этом структура остаётся понятной.

3.     Для простых случаев подойдёт редактирование данных — мы просто скрываем или удаляем часть информации. Например, вместо адреса «Москва, ул. Ленина, д. 10» показываем «Москва, ул. Ленина, д. ***». Быстро, просто, но эффективно.

4.     Есть ещё перестановка данных, или «перемешивание». Этот метод особенно полезен, если у вас большие наборы данных. Например, зарплаты сотрудников можно перемешать, чтобы никто не мог понять, какая из них кому принадлежит.

5.     Отдельно стоит упомянуть генерацию фейковых данных. Здесь вообще всё заменяется синтетическими значениями. Это идеальный вариант, если вам нужно создать абсолютно безопасный тестовый набор данных. Например, генерируем вымышленные адреса, телефоны и всё остальное. Ещё один значимый плюс этого способа: можно генерировать значения с помощью детерминированных алгоритмов. То есть если один и тот же алгоритм используется в разных системах с одним и тем же ключом или правилами, то результат преобразований будет одинаковым. Благодаря этому исходные данные будут всегда иметь идентичные значения, что позволяет идентифицировать совпадения в разных системах, не раскрывая реальные данные.

6.     А вот токенизация — это уже уровень посложнее. Мы заменяем реальные данные токенами, то есть уникальными идентификаторами, а связь с исходной информацией хранится отдельно. Это особенно полезно для работы с кредитными картами и другой финансовой информацией. Например, вместо номера карты «1234-5678-9012-3456» видим что-то вроде «ABC123DEF456».

7.     И наконец, дифференциальная приватность. Это что-то из продвинутой аналитики. Суть в том, что к данным добавляется шум, чтобы сохранить общую картину, но скрыть индивидуальные значения. Например, при анализе среднего возраста система добавляет случайные отклонения, чтобы нельзя было узнать возраст конкретного человека.

Как же выбрать алгоритм?
Всё зависит от задачи.

Если нужно сохранить формат — выбирайте подмену или генерацию фейковых данных. Для высоких требований безопасности — токенизацию или обфускацию. А для аналитики подойдёт дифференциальная приватность. Всё это — инструменты, которые можно и нужно комбинировать. Нет единственного «идеального» алгоритма, но правильно подобранное маскирование позволяет защищать данные без ущерба для их использования.

С алгоритмами стало более-менее понятно. Но как именно внедрить маскирование правильно и безболезненно для бизнес-процессов компании?

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

Давайте поговорим о статическом маскировании данных.

Этот метод на самом деле — один из самых понятных, но при этом очень эффективный, особенно если правильно его настроить.

Итак, что это такое?

Статическое маскирование (SDM) — это процесс, при котором мы берём реальные данные, модифицируем их (заменяем, обфусцируем или редактируем) и сохраняем в этой изменённой форме в новой базе. То есть у нас получается отдельная копия данных, которая выглядит как настоящая, но на самом деле не содержит ничего чувствительного.

Какие у этого метода преимущества?

  1. Безопасность на уровне среды: когда данные уже замаскированы, даже если кто-то получит доступ к копии базы, ничего критичного он из неё не извлечёт.

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

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

Как это реализовать?

В большинстве СУБД, таких как Oracle, SQL Server или PostgreSQL, есть инструменты для статического маскирования:

  • в Oracle это можно сделать с помощью Data Masking Pack;

  • в SQL Server есть специальные функции для генерации псевдонимов и обработки данных;

  • в PostgreSQL можно использовать сторонние инструменты вроде pgmask или писать свои скрипты.

Главный нюанс здесь — нужно понимать, какие данные маскировать. Например, если это паспортные данные или номера карт, то важно, чтобы они выглядели реалистично. Иначе тестовые системы могут просто не принять их.

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

Что же такое динамическое маскирование данных?

Динамическое маскирование (DDM) — это процесс, при котором данные остаются в своей оригинальной форме в базе, но при обращении к ним система автоматически подменяет или скрывает определённые значения в зависимости от настроек доступа. То есть пользователь, который запрашивает данные, видит только маскированную версию, в то время как сами данные остаются нетронутыми.

Как это работает на практике?

Допустим, у вас есть база клиентов интернет-магазина.

Специалист службы поддержки видит только часть данных: например, вместо полного ФИО отображается «Иванов К.».

А вот администратор системы, обладающий соответствующими правами, видит эти данные полностью.

Эта настройка может зависеть от роли пользователя или даже от типа запроса.

Пример реализации

В SQL Server динамическое маскирование данных уже встроено. Вы можете настроить маскирование на уровне базы, используя специальные политики. Например:

CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FullName NVARCHAR(50) MASKED WITH (FUNCTION = 'default()'),
    CreditCardNumber NVARCHAR(20) MASKED WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)')
);

В этом случае пользователи без особых прав доступа будут видеть замаскированное имя и часть номера карты.

В PostgreSQL и MySQL динамическое маскирование можно реализовать с помощью триггеров, представлений или расширений. Например, вы можете создать представление, которое возвращает маскированные данные в зависимости от пользователя:

CREATE VIEW Masked_Customers AS
SELECT
    CustomerID,  
    CASE WHEN current_user = 'admin' THEN FullName ELSE '***' END AS FullName
FROM Customers;

Когда это особенно полезно?

  1. Если у вас много пользователей с разными уровнями доступа к базе — что очень актуально для больших компаний с огромным количеством сервисов и бизнес-процессов.

  2. Когда важна защита данных в реальном времени, например, в CRM-системах.

  3. Если нужно минимизировать риски утечки данных через UI систем.

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

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

Реализация

  1. Создание политики маскирования

Настраиваем маскирование для столбцов, содержащих данные:

CREATE TABLE Clients (
    ClientID INT IDENTITY PRIMARY KEY,
    FullName NVARCHAR(50),
    Email NVARCHAR(50) MASKED WITH (FUNCTION = 'email()'),
    Phone NVARCHAR(15) MASKED WITH (FUNCTION = 'custom('XXX-XXX-XXXX')'),
    CreditCard NVARCHAR(16) MASKED WITH (FUNCTION = 'default()')
);

2. Управление правами доступа

Менеджеры получают доступ к маскированным данным:

CREATE USER SalesManager FOR LOGIN SalesLogin;
DENY UNMASK TO SalesManager;

Аналитики и администраторы имеют полный доступ:

CREATE USER Analyst FOR LOGIN AnalystLogin;
GRANT UNMASK TO Analyst;

3. Пример запросов:

Запрос от имени менеджера:

SELECT Email, Phone, CreditCard FROM Clients;

Результат:

Email  

Phone 

CreditCard

-------------------

--------------

------------

uXXX@XXXX.com 

XXX-XXX-XXXX

XXXXXX    

Запрос от имени администратора:

SELECT Email, Phone, CreditCard FROM Clients;

Результат:

Email  

Phone  

CreditCard  

-------------------

------------------

---------------

user@example.com

+77777777777

1234567890123456

Вот так это работает в Microsoft SQL Server, где настройки довольно интуитивны и встроены в базовый функционал.

Oracle

Теперь давайте посмотрим, как DDM реализуется в Oracle.

Oracle предлагает ещё больше гибкости, позволяя настраивать политики маскирования через мощный пакет DBMS_REDACT. Эта технология позволяет не только подменять данные «на лету», но и задавать сложные условия, при которых маскирование будет применяться. Перейдём к конкретному примеру, чтобы увидеть, как это работает.

1. Создаём таблицу Clients, где храним персональные данные клиентов:

CREATE TABLE Clients (
    ClientID NUMBER PRIMARY KEY,
    FullName VARCHAR2(50),
    Phone VARCHAR2(15),
    Email VARCHAR2(50),
    CreditCard VARCHAR(16)
);
INSERT INTO Clients (ClientID, FullName, Phone, Email, CreditCard)
VALUES (1, 'Johny Jo', '555-123-4567', 'johny.jo@example.com',1234567890987654);

INSERT INTO Clients (ClientID, FullName, Phone, Email, CreditCard)
VALUES (2, 'Jenny Je, '555-987-6543', 'jenny.je@example.com', 0987654321234567);

2. Настраиваем политики динамического маскирования

Используем пакет DBMS_REDACT, чтобы замаскировать контактные данные (номер телефона, email) и финансовую информацию.

Маскирование номера телефона: показываем только последние 4 цифры.

BEGIN
    DBMS_REDACT.ADD_POLICY(
        object_schema  => 'Customer',
        object_name    => 'Clients',
        column_name    => 'Phone',
        policy_name    => 'MASK_Phone',
        function_type  => DBMS_REDACT.PARTIAL,
        function_parameters => '0, ''*-*-'', 4',
        expression     => '1=1'
    );
END;

Маскирование email: скрываем часть адреса, оставляя первую букву и домен.

BEGIN
    DBMS_REDACT.ADD_POLICY(
        object_schema  => 'Customer',
        object_name    => 'Clients',
        column_name    => 'Phone',
        policy_name    => 'MASK_Phone',
        function_type  => DBMS_REDACT.PARTIAL,
        function_parameters => '0, ''*-*-'', 4',
        expression     => '1=1'
    );
END;

Маскирование номера карты: показываем нулевые значения вместо реального баланса.

BEGIN
    DBMS_REDACT.ADD_POLICY(
        object_schema  => 'Customer',
        object_name    => 'Clients',
        column_name    => 'CreditCard',
        policy_name    => 'MASK_CreditCard',
        function_type  => DBMS_REDACT.FULL,
        expression     => '1=1'
    );
END;
---

3. Проверка политики

Запрос от сотрудника отдела маркетинга (без привилегий):

SELECT FullName, Phone, Email, CreditCard FROM Clients;

Результат:

FullName  

Phone

  Email 

  CreditCard

------------

------------ 

-------------------

-------

Johny Jo  

*-*-4567

 jXXX@XXXX.com 

*-*-*-7654

Jenny Je 

*-*-6543

jXXX@XXXX.com 

*-*-*-4567      

Запрос от аналитика или администратора (с привилегиями): аналитики и администраторы видят данные без маскирования. Для этого им предоставляется привилегия EXEMPT REDACTION POLICY:

GRANT EXEMPT REDACTION POLICY TO analyst_user;

Результат:

FullName

Phone 

  Email   

  CreditCard

------------

------------

---------------------

-------

Johny Jo  

555-123-4567 

johny.jo@example.com

1234567890987654

Jenny Je

555-987-6543

jenny.je@example.com

09876543212345678

4. Удаление политики (при необходимости)

Если потребуется удалить политику маскирования:

BEGIN

    DBMS_REDACT.DROP_POLICY(

        object_schema  => 'Customer',

        object_name    => 'Clients',

        policy_name    => 'MASK_Phone'

    );

    DBMS_REDACT.DROP_POLICY(

        object_schema  => 'Customer',

        object_name    => 'Clients',

        policy_name    => 'MASK_Email'

    );

    DBMS_REDACT.DROP_POLICY(

        object_schema  => 'Customer',

        object_name    => 'Clients',

        policy_name    => 'MASK_CreditCard'

    );

END;

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

Почему DDM — это круто?

  1. Простота реализации. Экономия времени и ресурсов. Это, пожалуй, самый сильный аргумент. Вам не нужно переписывать код приложения, добавлять сложные процедуры или создавать отдельные базы. За счёт того, что маскирование можно внедрять в уже готовые решения, оно помогает очень легко скрыть критичные данные, не переделывая ролевую модель и не ломая бизнес-процессы.

  2. Гибкость. Представьте, что один и тот же набор данных видят разные пользователи по-разному. Например, аналитик видит только обрезанные номера карт, а администратор с доступом — всё, что нужно. Это реально удобно, когда в системе много ролей.

  3. Снижение риска утечек реальных данных через UI. Даже если произойдёт что-то неприятное, например, SQL-инъекция, злоумышленник получит только замаскированные данные. Да и при ошибках в конфигурации системы это тоже дополнительный уровень защиты.

  4. Соответствие стандартам. DDM может закрыть сразу несколько пунктов в требованиях к безопасности, будь то ФЗ-152, GDPR или PCI DSS. Это не то чтобы панацея, но настроить — проще простого.

Звучит это всё слишком сказочно. В чем же подвох?

  1. DDM не защищает от «своих» с доступом UNMASK. Если у кого-то есть права «видеть всё», то никакое маскирование уже не поможет. Поэтому таких людей должно быть минимум, и каждый должен знать, зачем ему этот доступ.

  2. Не заменяет шифрование. Тут нужно быть честными: DDM маскирует только на уровне визуализации. Данные в базе остаются в исходной форме, и, если кто-то получит прямой доступ к ней, он их увидит.

  3. Не работает на резервных копиях. Если кто-то украл вашу бэкап-базу, маскирование на ней работать не будет. Это важно учитывать, особенно если у вас нет политики шифрования бэкапов.

Итого мы получаем следующее.

Динамическое маскирование — это отличный инструмент, чтобы быстро и просто защитить данные на уровне доступа. Он решает много задач и экономит ресурсы, но нужно помнить, что это не замена всем остальным мерам безопасности. Это одна из частей комплексного подхода, и, если вы её внедрите, она точно сделает вашу жизнь немного спокойнее.

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

Кажется, что динамическое маскирование превосходит статическое по всем параметрам: гибкость, защита данных в реальном времени, минимальные затраты на поддержку. Но все же в ситуациях, когда необходимо обезличить чувствительные данные для всех пользователей (к примеру, на DEV/STG-средах), SDM безусловно выигрывает. Не стоит ограничиваться одним методом, следует адекватно оценить процессы и чувствительность данных и применять разные виды маскирования в зависимости от ваших потребностей.

Заключение

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

Внедрение маскирования — это не сложность, а инвестиция в будущее вашей компании. Это шаг к созданию защищённой и надёжной среды, где данные остаются под контролем, даже если они активно используются внутри организации.

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

Комментарии (20)


  1. Shaman_RSHU
    31.01.2025 10:35

    Не забывайте, что в некоторых случаях необходимо соблюдать требования:

    1. Федеральный закон № 152-ФЗ "О персональных данных" от 27.07.2006:

      • Определяет понятие обезличенных данных

      • Устанавливает требования к обезличиванию персональных данных

    2. Приказ ФСТЭК России от 11.01.2017 № 3 "Об утверждении требований к защите персональных данных при их обработке в информационных системах персональных данных":

      • Содержит требования к техническим средствам обезличивания данных

    3. ГОСТ Р ИСО/МЭК 29100-2014 "Информационная технология. Защита данных. Рамочная модель конфиденциальности":

      • Описывает методологию обезличивания данных

    4. ГОСТ Р ИСО/МЭК 29198-2-2016 "Информационная технология. Защита данных. Методы обезличивания данных. Часть 2. Техники обезличивания":

      • Предоставляет рекомендации по методам обезличивания

    5. Постановление Правительства РФ от 01.11.2012 № 1119 "Об утверждении правил определения категории защищенности объектов обработки персональных данных":

      • Учитывает степень обезличивания при категорировании объектов

    6. Положение Банка России от 25.06.2018 № 613-П "О требованиях к защите информации, составляющей банковскую тайну":

      • Содержит требования к обезличиванию банковских данных

    7. Приказ Минкомсвязи России от 25.03.2014 № 125 "Об утверждении Административного регламента Федеральной службы по надзору в сфере связи, информационных технологий и массовых коммуникаций по предоставлению государственной услуги по осуществлению контроля соблюдения операторами персональных данных требований законодательства Российской Федерации о персональных данных":

      • Включает проверку соблюдения требований к обезличиванию данных


    1. wytear Автор
      31.01.2025 10:35

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


  1. Mexico1821
    31.01.2025 10:35

    Спасибо большое! Пошел копировать части кода себе)


    1. wytear Автор
      31.01.2025 10:35

      Прекрасно, надеюсь код поможет улучшить безопасность вашей системы!)


  1. JBFW
    31.01.2025 10:35

    То есть часть функционала приложения, причем критическая, выносится на уровень СУБД.

    В целом усиливает интегрированность и ухудшает модифицируемость в будущем, потребует более глубокой переделки, это минус...


    1. wytear Автор
      31.01.2025 10:35

      В вопросах защиты данных почти всегда приходится искать компромисс между удобством разработки и безопасностью)

      Маскирование на уровне СУБД позволяет централизованно управлять доступом к данным и снижает риски утечек, в том числе через ошибки в приложении. В критически важных системах безопасность нередко оказывается приоритетнее гибкости, но решение всегда зависит от контекста.


  1. Akina
    31.01.2025 10:35

    removed


    1. Akina
      31.01.2025 10:35

      В PostgreSQL и MySQL динамическое маскирование можно реализовать с помощью триггеров, представлений или расширений. Например, вы можете создать представление, которое возвращает маскированные данные в зависимости от пользователя

      В MySQL это решается созданием "дублирующей БД", которая вместо таблиц содержит маскирующие представления с опцией SQL SECURITY DEFINER к таблицам основной БД.

      Соответственно учётной записи того, кто должен работать с маскированными данными, даётся право SELECT на дублирующую БД, и отбираются все права на реальную. И от имени такой УЗ можно смотреть только маскированные данные.

      В то же время разработчик, имеющий права на чтение и редактирование обеих БД, может для проверки своей работы просто переключаться между базами одним коротким USE databasename и смотреть, как работает один и тот же запрос и с маскированием, и без.

      PS. И не понял, каким боком тут триггеры затесались - вроде триггеры для SELECT ещё пока нигде не реализованы.


      1. wytear Автор
        31.01.2025 10:35

        Благодарю за ценный комментарий!
        Описанный вами подход с дублирующей БД выглядит красиво, особенно для случаев, когда важно строго изолировать доступ.
        Что касается триггеров, немного упустила этот момент, упоминать их в рамках динамического маскирования в MySQL было не совсем уместно, поскольку select-триггеры отсутствуют. Их скорее можно встретить в сценариях, когда маскирование применяется на этапе записи (insert/update). Это очень хорошее замечание, спасибо, что обратили внимание!)


  1. ml_or_lm
    31.01.2025 10:35

    Светлана, спасибо! Видел, что во многих компаниях вопрос с шифрованием и маскированием всегда важен.


    1. wytear Автор
      31.01.2025 10:35

      Верно, главное чтоб эти меры были не просто внедрены для галочки, а использовались эффективно)


  1. xenon
    31.01.2025 10:35

    Еще для смежной задачи (своевременное обнаружение утечек) - есть способ с "канарейками". Например, создаем фейк-юзера с паролем 123456 и пристально следим за логами. Реального юзера за ним нет, он никогда не залогинится. Но если вдруг залогинился - значит, кто-то угнал нашу базу юзеров. Аналогично, например, с ключами доступа к AWS - создаем специальный аккаунт, которым не пользуемся. И если кто-то воспользовался - поздравляю, кто-то влез на сервер и читает наши конфиги.

    https://canarytokens.org/nest/


  1. alexhu
    31.01.2025 10:35

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

    Хоть симетричное шифрование, хоть любое другое - всегда есть главный ключ. И хотел бы я ошибаться.


  1. Avas_Ton
    31.01.2025 10:35

    Разработчики и DBA выражают благодарность всем безопасникам! Что бы мы без вас делали!

    Больше логов богу логов! Ведь у нас ещё есть свободное место на дисках. Больше паразитной нагрузки на процессор, фигли он на 80% прохлаждается.

    И, да, обязательно меняйте пароли каждые 3 месяца на такие, которые невозможно запомнить и приходится записывать. На всех экземплярах разные!

    Б - Безопасность!


    1. wytear Автор
      31.01.2025 10:35

      Благодарю за ваш комментарий!

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

      Как говорится, безопасность, как антивирус: иногда мешает работать, но когда срабатывает, все говорят спасибо:)


  1. GGD_79
    31.01.2025 10:35

    Самый лучший способ - не хранить никаких данных, которые могут быть скомпрометированы.

    Нужен номер карты? Храним его в памяти процесса, но не на диске. Нужны ФИО и паспорт? Храним хэш.


    1. wytear Автор
      31.01.2025 10:35

      Боюсь, в современных реалиях невозможно полностью отказаться от хранения данных. Бизнесу нужны данные для своих процессов, к примеру, для проведения аналитики и обработки заказов. Да и законодательство может требовать хранения определённых данных. Минимизировать критичные данные — да, это одна из задач ИБ, храним только самое необходимое, и при этом защищаем.


  1. 0b10m
    31.01.2025 10:35

    Спасибо за статью! Подскажите, есть ли возможность автоматизировать процесс маскирования?


    1. wytear Автор
      31.01.2025 10:35

      Спасибо за ваш комментарий!

      Тут можно в разные стороны порассуждать, смотря что именно вы хотите автоматизировать)

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

      Можно встроить маскирование в CI/CD пайплайн, маскировать данные при деплое тестовой бд.

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


  1. Dizel30
    31.01.2025 10:35

    Была схожая проблема и мы решили ее с помощью Инфраскоп (PAM) , оказалось в нем есть DAM и DDM и проблему решили руками вендора