pgpro_scout

pgpro_scout — обнаружение чувствительной информации в базе данных

Синтаксис

pgpro_scout config [параметр...]

pgpro_scout inspect [параметр...]

Описание #

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

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

Утилита pgpro_scout поставляется вместе с Postgres Pro Standard в отдельном пакете pgpro_scout (подробные инструкции по установке приведены в Главе 16).

Словарь поиска представляет собой текстовый файл, в котором каждая строка имеет формат ключ-значение-комментарий, где:

  • Ключ — строка, содержащая условное имя параметра поиска.

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

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

pgpro_scout формирует файл отчёта с информацией о найденных вхождениях чувствительной информации. За подробностями обратитесь к Разделу «Отчёт pgpro_scout».

Использование pgpro_scout #

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

Создание словаря поиска pgpro_scout #

Чтобы сформировать базовый словарь поиска, выполните команду config. При необходимости его можно обновить или дополнить новыми условиями поиска. Ниже приведён пример словаря:

scout:
  column_names:
    matchers:
      - key: phones
        match_values: ["phones", "phone"]
        comment: "Поля номеров телефона"
  column_values:
    disabled: true # опционально
    case_sensitive: false # опционально
    matchers:
      - key: surnames
        disabled: false # опционально
        case_sensitive: true # опционально
        match_values: ["Иванов", "Петров"]
      - key: phones_data
        pattern: ^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
        comment: "Российские номера телефонов"
exclude:
  schemas: ['pgpro_sfile_data', 'dbms_lob', 'profile', 'information_schema', 'pg_catalog', 'pg_toast']
  column_types: ['timestamp with time zone']

Структура словаря поиска #

Словарь поиска состоит из следующих разделов:

  • scout — описание условий поиска.

  • exclude — список схем баз данных и типов полей, которые будут исключены из поиска.

Условия поиска могут быть двух типов:

  • column_names — имена полей.

  • column_values — значения полей.

Элемент matchers содержит список условий поиска. Каждый элемент matchers может содержать следующие параметры:

  • key — ключ поиска.

  • match_values — список строк для поиска в полях базы данных. Не может быть указан вместе с pattern.

  • pattern — регулярное выражение для поиска в полях базы данных. Не может быть указан вместе с match_values.

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

  • disabled — логическое значение, которое определяет, необходимо ли исключить условие из поиска.

  • comment — комментарий, который будет отображаться в файле отчёта.

Определение объектов базы данных, среди которых будет осуществляться поиск #

Чтобы определить объекты, по которым будет выполняться поиск, при его запуске задайте параметр --search-path. В параметре --search-path можно передать строку со списком объектов базы данных, перечисленных через запятую, которыми будет ограничен поиск:

  • Чтобы ограничить поиск схемой базы данных, задайте подстроку с именем схемы.

  • Чтобы ограничить поиск отдельной таблицей или таблицами, добавьте запись в формате: СХЕМА.ТАБЛИЦА или СХЕМА.{ТАБЛИЦА1, ТАБЛИЦА2}.

  • Чтобы ограничить поиск отдельным столбцом или столбцами таблицы, задайте подстроку в формате: СХЕМА.ТАБЛИЦА.СТОЛБЕЦ или СХЕМА.ТАБЛИЦА.{СТОЛБЕЦ1, СТОЛБЕЦ2}.

Таблица I.1. Примеры определения области поиска

Значение --search-pathОбласть поиска
publicВсе таблицы (со всеми столбцами) в схеме public.
public.{products, sales}Таблицы products и sales (со всеми столбцами) в схеме public.
public.products.{id, email}Столбцы id и email из таблицы products в схеме public.
public.productsТолько таблица public.products.
public.products,events,holds.card.idТаблица public.products, все таблицы в схеме events и столбец id из таблицы holds.card.

Запуск поиска конфиденциальной информации #

Чтобы запустить поиск конфиденциальной информации с доступным словарем поиска, выполните команду inspect, задав значение параметру --search path, как описано в Подразделе «Определение объектов базы данных, среди которых будет осуществляться поиск».

Справка по командной строке #

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

config #

pgpro_scout config [--out|-o строка] [--override|-O] [--help|-h]

Формирует базовый словарь поиска pgpro_scout. Параметры означают следующее:

--h
--help

Выводит справку по команде.

-O
--override

Переопределить файл словаря поиска, если он существует.

-o путь_к_файлу
--out путь_к_файлу

Задаёт путь к файлу словаря поиска.

inspect #

pgpro_scout inspect [--batch-size|-b uint] [--config-file|-f string]
[--dbname|-d string] [--disable-comment] [--hidden-sample] [--host|-H string]
[--order|-O string] [--output|-o string] [--password|-W string]
[--port|-p uint16] [--report-buffer uint16] [--rows-number|-n uint16]
[--sample-size uint16] [--search-path|-s string]
[--threads|-j int] [--username|-U string] [--help|-h]

Запускает поиск конфиденциальной информации. Параметры означают следующее:

-b размер
--batch-size размер #

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

Значение по умолчанию: 1000.

-f путь_к_файлу
--config-file путь_к_файлу #

Задаёт путь к файлу словаря поиска.

--d имя
--dbname имя #

Имя базы данных, к которой необходимо подключиться.

--disable-comment #

Создавать файл отчёта без комментариев.

--h строка
--help строка #

Выводит справку по команде.

--hidden-sample #

Маскирует найденные примеры в отчёте. Например: вместо Смирнова в отчёте будет отображаться См****ва.

--H имя
--host имя #

Имя базы данных или IP-адрес.

Значение по умолчанию: localhost.

-O порядок_поиска
--order порядок_поиска #

Порядок проверки строк. Возможные значения:

  • tail — брать строки с конца;

  • head — брать строки с начала;

  • random — взять случайные строки.

Значение по умолчанию: head.

-o путь_к_файлу
--output путь_к_файлу #

Задаёт путь к файлу отчёта.

--W строка
--password строка #

Пароль для подключения к базе данных.

--p имя
--port имя #

Порт для подключения к базе данных.

Значение по умолчанию: 5432.

--report-buffer размер #

Размер буфера отчёта.

Значение по умолчанию: 64

-n количество
--rows-number количество #

Количество строк для проверки в каждой таблице.

Значение по умолчанию: 10000.

--sample-size количество #

Количество найденных строк, которые необходимо включить в отчёт для каждой таблицы. Если значение равно 0, найденные строки не будут добавлены в отчёт.

Значение по умолчанию: 5.

-s путь_к_файлу
--search-path путь_к_файлу #

Список схем, таблиц и полей для проверки. За подробной информацией обратитесь к Подразделу «Определение объектов базы данных, среди которых будет осуществляться поиск».

Значение по умолчанию: 5.

-j путь_к_файлу
--threads путь_к_файлу #

Количество потоков, задействованных утилитой.

Значение по умолчанию: 14.

--U имя
--username имя #

Имя пользователя для подключения к базе данных.

Отчёт pgpro_scout #

В результате поиска pgpro_scout создаётся файл CSV. Этот файл содержит следующую информацию:

  • Дату и время завершения поиска.

  • Заголовки полей отчёта.

  • Результаты поиска.

Структура отчёта #

Результаты поиска содержат следующие поля:

Таблица I.2. Поля отчёта

ИмяОписание
locationПолное имя таблицы в формате <имя_схемы>.<имя_таблицы>, где было найдено вхождение.
columnСтолбец таблицы.
keyКлюч условия поиска из словаря поиска.
commentКомментарий к условию поиска из словаря поиска.
sampleПример найденного вхождения. Если поиск выполняется с параметром --sample-size, равным 0, это поле не будет включено в отчёт. Чтобы замаскировать содержимое этого поля, при запуске поиска добавьте параметр --hidden-sample.

В отчёт будет включено не больше полей из каждый таблицы, чем указано в параметре --sample-size.

Пример #

Ниже приведён пример файла отчёта:

#report time: 2025-06-16T11:10:58+03:00
location,column,key,comment, sample
public.expected,phone,phones,Российские номера телефонов,
events.holds,user_surname,surname,Русские фамилии, Иванов
events.holds,user_surname,surname,Русские фамилии, Петров