pgpro_scout — обнаружение чувствительной информации в базе данных
pgpro_scout config [параметр...]
pgpro_scout inspect [параметр...]
pgpro_scout — утилита командной строки, предназначенная для обнаружения чувствительной (конфиденциальной) информации в базе данных. В поисках такой информации pgpro_scout просматривает названия столбцов и значения полей в таблицах базы данных. Для выполнения поиска требуется специализированный словарь поиска, который можно сформировать данной утилитой.
Задача pgpro_scout провести разведку данных на предмет наличия чувствительной информации и привести примеры.
Утилита pgpro_scout поставляется вместе с Postgres Pro Enterprise в отдельном пакете pgpro_scout (подробные инструкции по установке приведены в Главе 17).
Словарь поиска представляет собой текстовый файл, в котором каждая строка имеет формат ключ-значение-комментарий, где:
Ключ — строка, содержащая условное имя параметра поиска.
Значение — условие, которому должно соответствовать поле базы данных, чтобы его можно было отнести к чувствительной информации. Может быть регулярным выражением или массивом строковых значений.
Комментарий — текстовое описание условия поиска, которое будет отображаться в результатах поиска.
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 имейте в виду следующие ограничения:
При поиске данных типа json/jsonb должны использоваться условия pattern, а не match_values.
В настоящее время pgpro_scout не поддерживает схемы, таблицы и поля с именами, чувствительными к регистру.
Поиск значений в полях большого объёма может существенно увеличить время проверки, что может выглядеть как зависание приложения. Если известно, что имеются поля с большим объёмом данных, исключите их из поиска, отредактировав значение параметра --search-path.
При использовании составного первичного ключа проверяемой таблицы не рекомендуется исключать из поиска отдельные поля, входящие в первичный ключ.
pgpro_scout поддерживает таблицы с первичными ключами следующих типов:
Числовые типы: smallint, integer, bigint, decimal, numeric, real, double, smallserial, serial, bigserial.
Денежный тип: money.
Символьные типы: text, bpchar, character, character(n).
Типы даты и времени: timestamp, timestampz, date, time, time with time zone, interval.
Типы, описывающие сетевые адреса: inet, cidr, macaddr, macaddr8.
Логический тип.
Тип UUID.
Диапазонные типы: int4range, int8range, daterange.
Типы массивов: поддерживаются массивы, имеющие типы с поддерживаемыми одиночными типами элементов.
Использование других типов данных в качестве первичных ключей может приводить к ошибкам.
В этом разделе описаны команды pgpro_scout. Необязательные параметры заключены в квадратные скобки.
pgpro_scout config [--out|-o строка] [--override|-O] [--help|-h]Формирует базовый словарь поиска pgpro_scout. Параметры означают следующее:
--h--helpВыводит справку по команде.
-O--overrideПереопределить файл словаря поиска, если он существует.
-o путь_к_файлу--out путь_к_файлуЗадаёт путь к файлу словаря поиска.
pgpro_scout inspect [--batch-size|-buint] [--config-file|-fstring] [--dbname|-dstring] [--disable-comment] [--hidden-sample] [--host|-Hstring] [--order|-Ostring] [--output|-ostring] [--password|-Wstring] [--port|-puint16] [--report-bufferuint16] [--rows-number|-nuint16] [--sample-sizeuint16] [--search-path|-sstring] [--threads|-jint] [--username|-Ustring] [--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 создаётся файл 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,Русские фамилии, Петров