Анонимайзер

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

Весь процесс анонимизации можно поэтапно выполнить в Платформе:

Внимание

Анонимайзер доступен только по дополнительной лицензии. Для приобретения дополнительной лицензии обратитесь в службу поддержки: support@tantorlabs.ru.

Чтобы открыть страницу «Анонимайзер», в левой панели нажмите на кнопку «Модули» → «Анонимайзер».

Примечание

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

Подробнее структура и метод работы pg_anon описаны в разделе «Работа pg_anon» и в документации СУБД Tantor.

Доступы

На вкладке «Доступы» вы можете назначить группам пользователей следующие роли:

  • Администратор по разведке — пользователи группы смогут настраивать мета-словари, запускать процесс и контролировать результат сканирования данных. Пользователям доступны следующие разделы:

    • Источники данных;

    • Словари;

    • Сканирование;

    • Предпросмотр.

  • Администратор по анонимизации — пользователи группы смогут проверять полноту разметки, запускать процесс анонимизации с использованием созданного администратором по разведке данных мета-словаря и контролировать результат анонимизации данных. Пользователям доступны следующие разделы:

    • Источники данных;

    • Словари;

    • Сканирование;

    • Предпросмотр;

    • Дампы;

    • Ресторы.

Чтобы назначить права группе:

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

  • В открывшемся окне выберите группу и уровень прав доступа.

  • Нажмите на кнопку «Добавить права».

Рассмотрим информацию на странице:

  1. Фильтр по правам доступа.

  2. Кнопка добавления прав для группы.

  3. Кнопка настройки таблицы. С ее помощью вы можете самостоятельно настроить внешний вид таблицы.

  4. Меню группы со следующими опциями:

    • «Редактировать» — позволяет изменить доступы для группы.

    • «Забрать права» — позволяет удалить права для группы. В открывшемся окне в текстовом поле введите «удалить» и нажмите на кнопку «Удалить».

Подключение к источнику данных

Источник данных — это исходная база данных, сенситивная (конфиденциальная) часть которой будет анонимизирована. Базу данных, часть которой анонимизирована, будем называть целевой БД.

Управлять источниками данных можно на вкладке «Источники данных». В ней перечислены все подключенные источники данных и информация о них:

  • название источника данных,

  • база данных источника,

  • дата и время последнего сканирования,

  • статус сканирования,

  • дата и время создания последнего дампа,

  • статус создания дампа.

Рассмотрим информацию на странице:

  1. Поисковая строка, с помощью которой можно искать источники данных по названиям.

  2. Кнопка для обновления страницы.

  3. Фильтр по статусу процесса сканирования и создания дампа.

  4. Кнопка создания нового источника данных.

  5. Кнопка настройки таблицы. С ее помощью вы можете самостоятельно настроить внешний вид таблицы.

  6. Меню источника данных, с помощью которого можно:

    • открыть страницу с дополнительной информацией об источнике данных. Также открыть эту страницу можно, кликнув на строку определённого источника данных;

    • переименовать источник данных;

    • отредактировать данные подключения;

    • удалить источник данных.

Добавление источника данных

Чтобы подключиться, выполните следующие действия:

  1. Кликните по кнопке «Добавить источник данных» в центре страницы или «Новый источник данных» в правом верхнем углу, если на странице уже есть другие источники данных.

  2. Заполните следующие поля:

    • название источника данных,

    • FQDN или IP сервера БД,

    • порт соединения с БД,

    • название БД,

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

      • изменение статуса сканирования, дампа или восстановления на «Завершено»;

      • изменение статуса сканирования, дампа или восстановления на «Ошибка».

  3. Если необходимо, добавьте дополнительные параметры, которые ускорят процесс сканирования источника данных:

    • число процессов, выполняющих операции в БД;

    • количество подключений к БД на каждый процесс;

    • путь к pg_dump — PostgreSQL-расширению, отвечающему за резервное копирование СУБД, с помощью которого будет создаваться дамп исходной БД с анонимизированными данными.

  4. После заполнения всех полей нажмите на «Сохранить».

Cловари

Словарь — набор правил, описывающих, где искать определённую информацию в базе данных.

Существует три вида словарей:

  • Сенситивные — правила, описывающие, в какой части БД находятся конфиденциальные данные.

  • Несенситивные — правила, описывающие, в какой части БД не находятся конфиденциальные данные.

  • Мета-словари — правила, которые не описывают, где конкретно находятся секретные данные, но примерно описывают тип и содержание данных, которые могут таковыми являться. Вы можете воспользоваться предустановленным мета-словарем или создать пользовательский на его основе.

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

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

Управлять словарями можно на вкладке «Словари», в которой находится список всех предустановленных и созданных словарей и информация о них:

  • название словаря;

  • тип: предустановленный или пользовательский;

  • статус процесса сканирования;

  • вариант или вид словаря: сенситивный, несенситивный и мета-словарь;

  • имя пользователя, создавшего словарь;

  • дата и время последних изменений словаря.

Рассмотрим информацию на вкладке:

  1. Поисковая строка, с помощью которой словари можно искать по названию.

  2. Кнопка импорта словарей. Чтобы импортировать словарь нажмите на эту кнопку и в открывшемся окне выберите словарь в формате .json или несколько словарей в zip-архиве. Если в Платформе есть словарь с таким именем, система предложит его перезаписать, заменив новым.

  3. Фильтр по следующим параметрам:

    • тип: предустановленный или пользовательский;

    • вариант: сенситивный, несенситивный или мета.

  4. Кнопка для создания словаря.

  5. Кнопка настройки таблицы. С ее помощью вы можете самостоятельно настроить внешний вид таблицы.

  6. Чекбоксы для выбора словарей. Один или несколько выбранных словарей можно удалить или экспортировать:

    • несколько словарей сохраняются в zip-архиве;

    • для удаления введите «удалить» в текстовом поле модального окна:

  7. Меню словарей, через которое можно:

    • открыть словарь, чтобы просмотреть и отредактироватьсуществующие правила или добавить новые;

      Кнопка «Сохранить как…» (цифра 1 на рисунке выше) создаёт новый словарь с таким же кодом. С помощью кнопки «Сохранить изменения» (цифра 2 на рисунке выше) можно сохранить изменённый код словаря.

    • переименовать словарь — переименовать можно только пользовательский словарь;

    • экспортировать словарь — сохранить json-файл словаря.

    • дублировать словарь — создать новый словарь на основе данного;

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

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

Сенситивный или мета-словарь можно создать вручную. Несенситивный словарь создать нельзя — он появляется только в результате сканирования.

Создание словаря

Чтобы добавить словарь, нажмите на кнопку «Создать словарь».

В появившемся модальном окне заполните:

  • название словаря;

  • вариант словаря — сенситивный или мета-словарь.

Структура мета-словаря

Ниже представлена структура мета-словаря с описанием полей:

{
    "field": {          # Используйте для обнаружения конфиденциальных полей по имени, без сканирования содержащихся в них данных.
        "rules": [      # Список регулярных выражений для поиска полей по имени
             "<field_name_regex: string>",
        ],
        "constants": [  # Список постоянных имен полей
            "<field_name: string>",
        ]
    },
    "skip_rules": [  # Список схем, таблиц и полей, которые нужно пропустить.
        {
            # Указанные схемы, таблицы и поля будут исключены из сканирования. Это может быть полезно, если в базе данных есть большие схемы, не содержащие конфиденциальные данные.
            "schema": "<schema_name: string>",             # Используйте для пропуска схем с точным совпадением имени. Не может быть указано одновременно с "schema_mask".
            "schema_mask": "<schema_regex_mask: string>",  # Используйте для пропуска схем, имена которых соответствуют регулярному выражению. Не может быть указано одновременно с "schema".
            # Обязательно должен быть указан один из параметров: "schema" или "schema_mask".
            "table": "<table_name: string>",               # Опционально. Используйте для пропуска таблиц с точным совпадением имени.                    "table_mask": "<table_regex_mask: string>",    # Опционально. Используйте для пропуска таблиц, имена которых соответствуют регулярному выражению.
            # Если "table" и "table_mask" не указаны, будет пропущена вся схема.
            "fields": [                       # Используйте для пропуска полей таблицы. Если не указано, будет пропущена вся таблица.
                "<field_name: string>"
            ]
        }
    ],
    "include_rules": [ # Список схем, таблиц и полей, которые будут просканированы.
        {
            # Используйте, если необходимо просканировать конкретные схемы, таблицы или поля или отладить некоторые функции на конкретном поле
            "schema": "<schema_name: string>",             # Используйте для сканирования схем с точным совпадением имени. Не может быть указано одновременно с "schema_mask".
            "schema_mask": "<schema_regex_mask: string>",  # Используйте для сканирования схем, имена которых соответствуют регулярному выражению. Не может быть указано одновременно с "schema".
            # Обязательно должен быть указан один из параметров: "schema" или "schema_mask".
            "table": "<table_name: string>",               # Опционально. Используйте для сканирования таблиц с точным совпадением имени.
            "table_mask": "<table_regex_mask: string>",    # Опционально. Используйте для сканирования таблиц, имена которых соответствуют регулярному выражению.
            # Если "table" и "table_mask" не указаны, будет просканирована вся схема.
            "fields": [                                    # Используйте для сканирования определенных полей таблицы. Если не указано, будет просканирована вся таблица.
                "<field_name: string>"
            ]
        }
    ],
    "data_regex": {  # Список регулярных выражений для поиска чувствительных данных.
        "rules": [
            """[A-Za-z0-9]+([._-][A-Za-z0-9]+)*@[A-Za-z0-9-]+(\.[A-Za-z]{2,})+""",  # email
            "^(7?\d{10})$",  # телефон 7XXXXXXXXXX
        ]
    },
    "data_const": {
        # Список констант, при обнаружении которых поле будет включено в словарь. Можно указать слова или фразы.
        "constants": [
            "<field_value_full: string>",
        ],
        # Список частичных констант. Если значение поля содержит подстроку из этого списка, оно будет считаться чувствительным.
        "partial_constants": [
             "<field_value_partial: string>",
        ]
    },
    "data_func": { # Список функций для конкретных типов полей.
        "<field_type: string>": [  # Тип поля, который будет проверяться функциями, указанными ниже. Можно использовать пользовательские типы. Также можно использовать общий тип "anyelement" для всех типов полей. Правила для "anyelement" будут добавлены для правил всех типов после их собственных правил.
            {
                "scan_func": "<scan_function_for_field: string>",                # Функция для сканирования значения поля. Функция сканирования имеет фиксированную сигнатуру вызова: (value, schema_name, table_name, field_name). Также эта функция должна возвращать булевый результат.
                "anon_func": "<anonymization_rule_template_for_field: string>",  # Шаблон правила анонимизации. Должен содержать заполнитель %s для имени поля.
                "n_count": "<how_many_checks_must_be_passed: integer>",          # Сколько раз "scan_func" должна вернуть "True" для значений в одном поле. Если это количество будет достигнуто, поле будет анонимизировано с помощью "anon_func".
            },
        ],
    },
    "data_sql_condition": [ # Список правил для определения выборки данных для конкретных таблиц по пользовательским условиям.
        {
            "schema": "<schema_name: string>",             # Используйте для проверки схем с точным совпадением имени. Не может быть указано одновременно с "schema_mask".
            "schema_mask": "<schema_regex_mask: string>",  # Используйте для проверки схем, имена которых соответствуют регулярному выражению. Не может быть указано одновременно с "schema".
            # Обязательно должен быть указан один из параметров: "schema" или "schema_mask".
            "table": "<table_name: string>",               # Опционально. Используйте для проверки таблиц с точным совпадением имени.
            "table_mask": "<table_regex_mask: string>",    # Опционально. Используйте для проверки таблиц, имена которых соответствуют регулярному выражению.
            "sql_condition": # Условие в формате raw SQL. Необходимо указать SQL-условие для предложения WHERE. Например, если нужна выборка данных, созданная к 2024 году:
                """
                WHERE created > '2024-01-01' AND created < '2024-12-31'
                """
        }
    ],
    "sens_pg_types": [
        # Список типов полей, которые должны проверяться (остальные типы проверяться не будут). Если этот массив пуст, будут использованы значения по умолчанию: text, integer, bigint, character, json
        "text",
        "integer",
        "bigint",
        "varchar",  # Рекомендуется указывать короткие названия, потому что программа проверки ищет подстроки в оригинальном имени. Например, тип varchar(3) содержит varchar, поэтому программа проверит varchar(3).
        "json"
    ],
    "funcs": {  # Список типов полей (int, text, ...) и функций для анонимизации.
        # Если определенное поле найдено во время сканирования, будет использована функция из этого списка в соответствии с его типом.
        "<field_type: string>": "<anonymization_function_for_field_type: string>",
        # Функция по умолчанию может быть установлена, если для типа данных не указана отдельная функция.
        # Если функция по умолчанию не настроена, будет использована следующая функция: "anon_funcs.digest(\"%s\", 'salt_word', 'md5')"
        "default": "<universal_anonymization_function_for_all_field_types: string>"
    }
}

Структура сенситивного словаря

Ниже представлена структура сенситивного словаря с описанием полей:

{
    "dictionary": [ # Список правил анонимизации для дампа
        {
            "schema": "<schema_name: string>",       # Схема таблицы
            "table": "<table_name: string>",         # Имя таблицы
            "fields": {                              # Список полей для анонимизиации. Остальные поля анонимизированы не будут.
                "<field_name: string>": "<anonymization_rule_for_field: string>",
            },
            "sql_condition":                         # Опционально. Условие в формате raw SQL для фильтрации данных при выгрузке.
                """
                <raw_SQL_WHERE_condition: string>
                """
        }
    ],
    # Опциональная секция. Используется для исключения схем и таблиц из дампа данных. Если таблица находится и в секции "dictionary_exclude", и в "dictionary", то таблица будет выгружена.
    "dictionary_exclude": [
        {
            "schema": "<schema_name: string>",             # Используйте для исключения схем с точным совпадением имени. Не может быть указано одновременно с "schema_mask".
            "schema_mask": "<schema_regex_mask: string>",  # Используйте для исключения схем, имена которых соответствуют регулярному выражению. Не может быть указано одновременно с "schema".
            # Обязательно должен быть указан один из параметров: "schema" или "schema_mask".
            "table": "<table_name: string>",               # Используйте для исключения таблиц с точным совпадением имени. Не может быть указано одновременно с "table_mask".
            "table_mask": "<table_regex_mask: string>",    # Используйте для исключения таблиц, имена которых соответствуют регулярному выражению. Не может быть указано одновременно с "table".
            # Обязательно должен быть указан один из параметров: "table" или "table_mask".
        }
    ]
}

Сканирование

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

  • у вас нет сенситивного словаря;

  • у вас есть сенситивный словарь, но вы хотите его улучшить или создать новый на его основе;

  • вы хотите получить несенситивный словарь для ускорения процесса анонимизации.

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

Управлять сканированием можно на вкладки «Сканирование». Чтобы перейти на эту вкладку, кликните на строку определённого источника данных и перейдите на вкладку «Сканирование».

На этой странице находится список запущенных сканирований для выбранного источника данных и информация о них:

  • название сканирования;

  • просканированная база данных;

  • использованные при сканировании словари;

  • глубина сканирования;

  • статус процесса сканирования:

    • Неизвестно,

    • Завершено,

    • Ошибка,

    • В процессе,

    • Запуск.

  • дата и время запуска сканирования;

  • дата и время завершения процесса сканирования;

  • почта пользователя, запустившего сканирование.

Чтобы запустить сканирование, нажмите на кнопку «Добавить сканирование» в центре страницы или «Новое сканирование» в правом верхнем углу, если на странице уже есть сканирования, и пройдите визард настройки процесса сканирования:

1 шаг:

  • Введите название сканирования.

  • Выберите тип сканирования: частичный или полный. Частичный тип подойдёт, если у вас уже есть несенситивный словарь, описывающий, какую часть БД сканировать не нужно. Если несенситивного словаря нет, нужно будет пройти по всей БД.

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

  • Введите название сенситивного словаря, который получится в результате сканирования.

  • Введите название несенситивного словаря, который получится в результате сканирования (если нужен).

2 шаг:

  • Выберите мета-словарь для сканирования.

3 шаг (опционально):

  • Выберите сенситивный словарь для сканирования.

4 шаг (опционально):

  • Выберите несенситивный словарь для сканирования.

Примечание

Если сканирование запустить не получилось, возможно, у pg_anon нет разрешения подключаться к источнику данных через tcp/ip соединение.

Чтобы это проверить, посмотрите содержимое файла pg_hba.conf:

cat /var/lib/postgresql/tantor-se-16/data/pg_hba.conf

В выводе должна быть следующая строка (вместо «xxx.xxx.xxx.xxx» должен быть IP-адрес сервера, на котором находится источник данных, а вместо «yy» - маска сети):

host all all xxx.xxx.xxx.xxx/yy scram-sha-256

Если её нет, отредактируйте файл pg_hba.conf следующей командой, поменяв в ней «xxx.xxx.xxx.xxx» на нужный IP, а «yy» на маску сети:

echo 'host all all xxx.xxx.xxx.xxx/yy scram-sha-256' >> /var/lib/postgresql/tantor-se-16/data/pg_hba.conf

Рассмотрим информацию на странице:

  1. Поисковая строка, с помощью которой сканирования можно искать по названию.

  2. Кнопка обновления для быстрого просмотра результатов изменений.

  3. Фильтр по статусу сканирования:

    • Неизвестно,

    • Завершено,

    • Ошибка,

    • В процессе,

    • Запуск.

  4. Кнопка создания нового сканирования.

  5. Кнопка настройки таблицы. С ее помощью вы можете самостоятельно настроить внешний вид таблицы.

  6. С помощью меню сканирования можно:

    • запустить сканирование;

      Примечание

      Запустить сканирование можно, если статус сканирования «Ошибка» или «Неизвестно».

    • посмотреть словари, являющиеся результатом сканирования;

    • переименовать сканирование;

    • удалить сканирование.

Предпросмотры

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

На вкладке «Предпросмотр» можно посмотреть результат применённых функций к сенситивным частям выбранной БД и информацию об этих предпросмотрах:

  • название предпросмотра;

  • название базы данных, в части которой была проведена анонимизация;

  • использованные для данного процесса анонимизации словари.

Для создания предпросмотра кликните по кнопке «Добавить предпросмотр» в центре страницы или «Новый предпросмотр», если на странице уже есть предпросмотры.

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

Примечание

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

Рассмотрим информацию на странице:

  1. Поисковая строка, с помощью которой предпросмотры можно искать по названию.

  2. Кнопка обновления для быстрого просмотра результатов изменений.

  3. Кнопка создания нового предпросмотра.

  4. С помощью меню предпросмотров можно:

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

    • переименовать предпросмотр;

    • отредактировать предпросмотр — поменять его название или используемые словари;

    • удалить предпросмотр.

Дампы

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

Управлять дампами можно на вкладке «Дампы».

На этой вкладке находится список дампов, созданных для выбранного источника данных и информация о них:

  • название дампа;

  • название исходной базы данных;

  • статус процесса создания дампа;

  • путь к дампу;

  • размер дампа;

  • дата и время начала создания дампа;

  • дата и время конца создания дампа;

  • почта пользователя, запустившего создание дампа.

Чтобы запустить создание нового дампа, нажмите на кнопку «Создать дамп» в центре страницы или «Новый дамп» в правом верхнем углу, если на странице уже есть другие дампы.

В появившееся модальное окно введите:

  • название дампа;

  • тип дампа: полный, только структура или только данные;

  • путь к дампу (дефолтный путь к дампу — /opt/tantor/eco/pg_anon);

  • сенситивные словари для создания дампа;

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

    • «указанные таблицы» — через запятую укажите список таблиц, которые необходимо включить в дамп. Для указания по маске используйте символ * в начале или конце имени;

    • «все, кроме указанных» — через запятую укажите список таблиц, которые необходимо исключить из дампа. Аналогично поддерживается указание по маске с помощью *. Если таблицы связаны через FK, то связи будут разорваны перед созданием дампа.

Рассмотрим информацию на странице:

  1. Поисковая строка, с помощью которой можно искать дампы по названию.

  2. Кнопка обновления для быстрого просмотра результатов изменений страницы.

  3. Фильтр по статусу:

    • Неизвестно,

    • Завершено,

    • Ошибка,

    • В процессе,

    • Запуск.

  4. Кнопка создания нового дампа.

  5. Кнопка настройки таблицы. С ее помощью вы можете самостоятельно настроить внешний вид таблицы.

  6. С помощью меню дампа можно:

    • ввести данные для подключения к БД и запустить создание дампа;

      Примечание

      Запустить создание дампа можно, если статус создания дампа «Ошибка» или «Неизвестно».

    • переименовать дамп;

    • восстановить дамп со статусом «Завершено»;

    • удалить дамп. В открывашемся окне введите «удалить» в текстове поле. Если вы не подключались к БД, укажите данные для подключения.

Восстановление

Дампы можно восстановить на указанный сервер.

Внимание

Восстановить можно только дампы со статусом «Завершено».

Чтобы восстановить дамп выполните следующие действия:

  • на вкладке «Дампы» в меню нужного дампа выберите «Восстановить»;

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

    • FQDN/IP сервера БД;

    • Порт;

    • Название БД;

    • Имя пользователя;

    • Пароль;

    • При установке галочки «Очистить целевую БД перед восстановлением» будет передан флаг drop_db для удаления базы данных;

    • Для частичного восстановления данных выберите один из вариантов:

      • «Указанные таблицы» — введите через запятую список таблиц для восстановления. Для указания по маске используйте символ * в начале или конце имени;

      • «Все, кроме указанных» — введите через запятую список таблиц, которые не нужно восстанавливать. Аналогично поддерживается указание по маске с помощью *.

  • нажмите на кнопку «Восстановить».

После восстановления подробная информация будет отображаться на вкладке «Ресторы»:

  • название дампа;

  • FQDN/IP;

  • название базы данных;

  • почта пользователя, запустившего восстановление;

  • статус восстановления;

  • дата и время начала;

  • дата и время окончания.

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

Если при восстановлении дампа возникла ошибка, восстановление можно перезапустить на вкладке «Ресторы». Для этого в меню нужного дампа выберите пункт «Перезапустить» и в открывшемся модальном окне введите имя и пароль пользователя.

Восстановленые дампы можно искать по названию и фильтровать по статусу.

История

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

Рассмотрим информацию на вкладке:

  1. Поисковая строка, с помощью которой действия можно искать по названию.

  2. Кнопка обновления страницы.

  3. Фильтр по статусам и типам действий.

  4. Таблица с информацией о действиях:

    • «Название»;

    • «Тип действия» — сканирование, предпросмотр, дамп или рестор;

    • «Название БД»;

    • «Запустил» — электронная почта пользователя, запустившего действие;

    • «Статус» — неизвестно, успешно, ошибка, в процессе или запуск;

    • «Начало» — дата и время запуска действия;

    • «Конец» — дата и время окончания действия.

  5. Кнопка настройки таблицы. С ее помощью вы можете самостоятельно настроить внешний вид таблицы.

  6. Меню действия, с помощью которого можно просмотреть журнал событий:

    Если действие было запущено до версии 6.1.1, журнал событий будет пустым:

Работа pg_anon

pg_anon основан на Python3 и использует сторонние библиотеки. Используются следующие инструменты:

  • инструмент PostgreSQL pg_dump для выгрузки структуры базы данных,

  • инструмент PostgreSQL pg_restore для воспроизведения структуры базы данных.

Запустить pg_anon может администратор с правами подключения к исходной базе данных (source DB). Pg_anon на основе словаря выполняет дамп в указанный каталог в файловой системе. После этого каталог с файлами передается на хост целевой базы данных (target DB). После размещения каталога на хосте запускается процесс восстановления под учетными данными целевой БД. Целевая БД должна быть создана заранее с помощью команды CREATE DATABASE и не должна содержать никаких объектов. Если в этой БД есть пользовательские таблицы, процесс восстановления не запустится. Когда восстановление завершится, база данных будет готова к работе, при этом сотрудники смогут подключаться к базе данных без риска утечки чувствительных данных.

На рисунке ниже представлен процесс передачи данных из исходной БД в целевую БД.

В Платформе подключиться к исходной базе данных можно на вкладке «Источники данных».

Создание словаря

Словарь, на основе которого будет работать pg_anon, можно создать автоматически или вручную:

  • при автоматическом создании словаря pg_anon запускается в режиме сканирования исходной базы данных и использует мета-словарь. Во время сканирования имена полей проверяются по заданным маскам, а содержимое полей — по набору регулярных выражений. Скорость создания словаря зависит от объема правил, установленных при сканировании базы данных, и выделенного под параллельное сканирование количества процессов. При сканировании каждая строка в выборке проверяется по каждому правилу.

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

На рисунке ниже представлены оба варианта создания словаря.

В Платформе создать новый словарь и просмотреть существующие можно на вкладке «Словари». Запустить сканирование можно на вкладке «Сканирование» на странице нужного источника данных.

Работа pg_anon во время дампа и восстановления

Ниже приведен упрощенный процесс работы pg_anon.

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

  1. Дамп информации из исходной базы данных создается в отдельный файл без маскирования.

  2. Запускается маскирование данных из исходной БД.

  3. Дамп информации из исходной БД создается в отдельный файл с маскированием.

После этого дамп с замаскированными данными нужно восстановить:

  1. Создается целевая БД.

  2. Данные из файла с дампом информации из исходной БД загружаются в целевую БД.

В Платформе запустить создание нового дампа или восстановление существующего можно на вкладке «Дампы» на странице источника данных.

Режимы pg_anon, дампа и восстановления

pg_anon работает в следующих режимах:

  • init — создает схему anon_funcs с функциями анонимизации.

  • create-dict — сканирует данные БД и создает подготовленный файл словаря с чувствительными данными с профилем анонимизации и подготовленный файл словаря без чувствительных данных для ускорения работы в последующем в режиме create-dict.

  • view-fields — отображает таблицу с полями, которые будут анонимизированы, и используемыми в процессе правилами. Таблица содержит поля schema, table, field, type, dict_file_name, rule, основанные на подготовленном сенситивным словаре.

  • view-data — показывает скорректированную таблицу с примененными правилами анонимизации из подготовленного файла сенситивного словаря.

  • dump — создает дамп структуры базы данных с использованием инструмента pg_dump Postgres, и дампы данных с использованием запросов COPY … с функциями анонимизации. При дампе данные сохраняются локально в формате .bin.gz. На этом этапе данные анонимизируются на стороне базы данных с помощью anon_funcs.

  • restore — восстанавливает структуру базы данных с помощью инструмента pg_restore Postgres и переносит данные из дампа в целевую БД. Режим может отдельно восстанавливать структуру базы данных или сами данные.

  • sync-struct-dump — создает дамп структуры базы данных с использованием инструмента Postgres pg_dump.

  • sync-data-dump — создает дамп данных базы данных с использованием запросов COPY … с функциями анонимизации. При дампе данные сохраняются локально в формате .bin.gz. На этом этапе данные анонимизируются на стороне базы данных с помощью anon_funcs.

  • sync-struct-restore — восстанавливает структуру базы данных с использованием инструмента Postgres pg_restore.

  • sync-data-restore — восстанавливает данные базы данных из дампа в целевую БД.

Можно создать дамп трех видов:

  • дамп данных,

  • дамп структуры,

  • дамп структуры и данных.

Каждый режим восстановления требует выполнения соответствующего дампа. Существует три режима восстановления:

  • восстановление данных,

  • восстановление структуры,

  • восстановление структуры и данных.