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|-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 #
В результате поиска 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,Русские фамилии, Петров