Содержание статьи

При работе с унаследованным или многоуровневым приложением нередко требуется понять, какая СУБД отвечает за хранение данных. Без этого сложно настраивать миграции, искать узкие места в запросах и подключать инструменты мониторинга. Точный тип хранилища можно установить по ряду признаков внутри проекта и инфраструктуры.
Чаще всего нужная информация скрыта в конфигурационных файлах, строках подключения, переменных окружения и используемых библиотеках. Даже фрагменты запросов позволяют определить, относится ли проект к MySQL, PostgreSQL, SQL Server или другой системе. Важно проверять каждый источник отдельно, поскольку крупные проекты иногда используют несколько разных хранилищ.
Если доступ к исходному коду ограничен, помогает анализ сетевых портов, активных служб и инструментов администрирования. По характеру открытых сервисов и используемым портам можно установить, какой сервер запущен и к какой СУБД подключается приложение. Такой способ особенно полезен при работе с контейнерами и микросервисами.
Выявление используемых файловых форматов и служебных расширений

Первый шаг – просмотреть корневые каталоги проекта и каталоги, связанные с данными. Наличие файлов .sqlite, .db или .db3 указывает на использование SQLite. Файлы журналов .ibd и .frm встречаются в проектах на MySQL и MariaDB, а каталоги с расширениями .mdf и .ldf характерны для Microsoft SQL Server.
В репозитории иногда присутствуют экспортные дампы. Файлы .sql содержат подсказки по синтаксису: конструкции AUTO_INCREMENT чаще связаны с MySQL, а SERIAL встречается в PostgreSQL. Если обнаружены .bson или каталоги с двоичными дампами, проект может использовать MongoDB.
Имеет смысл проверить каталоги резервных копий. В проектах с PostgreSQL нередко встречаются файлы .backup, созданные через pg_dump. Oracle оставляет .dmp и вспомогательные контрольные файлы. По таким артефактам можно определить не только тип СУБД, но и предполагаемый способ восстановления данных.
Если проект хранит конфигурации в docker-контейнерах или окружениях виртуализации, полезно просмотреть каталоги с volume-данными. Внутри них остаются структурные файлы конкретных СУБД, что позволяет установить, какое хранилище подключено даже без доступа к коду.
Анализ конфигурационных файлов проекта для обнаружения параметров БД

Основные сведения о СУБД чаще всего находятся в файлах config.yaml, config.json, .env, settings.php, appsettings.json или аналогичных файлах среды. В них задаются параметры подключения: хост, порт, имя драйвера, тип адаптера и префиксы ключей. Наличие параметров вида driver=mysql, adapter=pgsql или строк Data Source=localhost;Initial Catalog=… даёт прямое указание на конкретную СУБД.
Важно изучить структуру блоков конфигурации. В проектах на Django используется ключ ENGINE, где значения django.db.backends.postgresql или django.db.backends.mysql обозначают соответствующие системы. В Node.js-проектах подсказки дают параметры пакетов pg, mysql2, mssql. В PHP-фреймворках тип хранилища часто указан в секциях database или connections.
Если проект использует ORM, конфигурации могут содержать сведения о диалекте. В файлах для SQLAlchemy встречаются записи postgresql://, mysql+pymysql://, mssql+pyodbc://. Эти префиксы указывают не только на СУБД, но и на конкретный драйвер.
Иногда параметры подключения вынесены в отдельные секции для тестовой и рабочей среды. В таких случаях следует проверить оба блока, поскольку разные окружения могут обращаться к разным СУБД. Это помогает обнаружить смешанные конфигурации, которые часто встречаются в проектах с микросервисной архитектурой.
Проверка строк подключения в коде и переменных окружения

Строки подключения обычно содержат явные признаки используемой СУБД. Они встречаются в файлах конфигурации, модулях инициализации, стартовых скриптах и переменных окружения. Достаточно выявить характерные префиксы и параметры, чтобы определить конкретное хранилище.
| Пример строки | Предполагаемая СУБД |
|---|---|
| postgresql://user:pass@host:5432/db | PostgreSQL |
| mysql://user:pass@host:3306/db | MySQL / MariaDB |
| mssql://user:pass@host:1433/db | Microsoft SQL Server |
| mongodb://user:pass@host:27017/db | MongoDB |
| sqlite:///path/to/file.db | SQLite |
В переменных окружения часто используются ключи вида DB_CONNECTION, DATABASE_URL, SQLALCHEMY_DATABASE_URI. Формат значения помогает определить тип СУБД без доступа к коду. Если переменная содержит порт 5432, скорее всего используется PostgreSQL; порт 3306 типичен для MySQL; 1433 указывает на SQL Server.
Рекомендуется проверить не только рабочие переменные, но и значения для тестов и локальной разработки. В разных окружениях может применяться различная СУБД, и это влияет на анализ структуры проекта. Если используются сервисы контейнеризации, строки подключения могут указывать на имена контейнеров вместо обычных хостов.
Определение типа БД по используемым драйверам и библиотекам

Список зависимостей проекта позволяет точно определить, с какой СУБД работает приложение. В Python проекты часто включают пакеты psycopg2 или asyncpg для PostgreSQL, pymysql или mysqlclient для MySQL, cx_Oracle для Oracle и pymssql для SQL Server. Присутствие sqlite3 указывает на использование встроенного хранилища SQLite.
В Node.js аналогичную информацию дают пакеты pg, mysql2, mariadb, mssql, oracledb и mongodb. Если используется ORM, важно проверить драйверы, указанные в её конфигурации: например, Sequelize подключает адаптеры sequelize-postgres, sequelize-mysql или sequelize-mssql.
В PHP-проектах ключевые признаки находятся в списке расширений и подключаемых модулей. Наличие pdo_pgsql, pdo_mysql, pdo_sqlsrv или oci8 помогает установить конкретную СУБД. В Laravel и Symfony тип хранилища также отражён в настройках драйвера PDO.
При работе с Java используется набор JDBC-драйверов. Файлы postgresql-*.jar, mysql-connector-*.jar, mssql-jdbc-*.jar или ojdbc*.jar однозначно указывают на соответствующий сервер. Проверка этих библиотек помогает определить тип БД даже в случаях, когда строки подключения скрыты в закрытых контурах или шифрованных конфигурациях.
Определение СУБД через сетевые порты и активные сервисы

Сетевые порты и запущенные службы помогают определить тип используемого сервера без доступа к исходному коду. Достаточно проверить открытые порты и сервисы в контейнерах, на хостах или внутри виртуальных окружений.
- 5432 – стандартный порт PostgreSQL. При его активности часто обнаруживается сервис postgres или контейнер с аналогичным именем.
- 3306 – типичен для MySQL и MariaDB. В списке процессов встречаются mysqld или mariadbd.
- 1433 – используется Microsoft SQL Server. Процесс обычно отображается как sqlservr.
- 27017 – характерен для MongoDB. В процессе появляется mongod.
- 1521 – порт Oracle Database, где активен процесс tnslsnr или oracle.
Для проверки открытых портов подходят утилиты netstat, ss и lsof. Они показывают, какой процесс привязан к конкретному порту. Если приложение работает в контейнерах, аналогичные сведения доступны через docker ps и docker inspect.
В случае распределённых систем полезно просмотреть конфигурации сервисов в оркестраторах. В Kubernetes порты контейнеров указаны в манифестах Deployment и StatefulSet. Их значения помогают понять, какая СУБД используется внутри кластера, даже без доступа к файловой структуре.
Распознавание SQL-диалектов по синтаксису запросов

SQL-диалекты различаются конструкциями для создания таблиц, типов данных и функций. PostgreSQL использует типы SERIAL для автоинкремента, ключевые слова ILIKE для нечувствительного к регистру поиска и функции NOW(), CURRENT_DATE. MySQL применяет AUTO_INCREMENT, ENGINE=InnoDB и функции CURDATE(), NOW().
В SQL Server автоинкремент задаётся IDENTITY, а функции работы с датами включают GETDATE(), DATEADD(). Для Oracle характерны типы NUMBER, VARCHAR2, последовательности SEQUENCE и функция SYSTIMESTAMP.
При анализе проекта полезно собирать фрагменты SQL-запросов и сравнивать их с типичными конструкциями диалектов. Следует обратить внимание на:
- Типы данных колонок
- Синтаксис автоинкремента и генерации ключей
- Функции работы с датами и строками
- Специфические ключевые слова для поиска или сортировки
Даже небольшие различия позволяют установить, с какой СУБД работает приложение. Это особенно важно в проектах с несколькими источниками данных, где каждый диалект может указывать на отдельную систему хранения.
Определение типа хранилища по структуре схем и модели данных

Структура таблиц, схем и связей между объектами базы данных позволяет выявить тип СУБД даже при отсутствии явных признаков в конфигурации. В реляционных системах наблюдаются строгие схемы с первичными и внешними ключами, нормализованными таблицами и типами данных вроде INTEGER, VARCHAR, DATE.
PostgreSQL поддерживает сложные типы, такие как JSONB, массивы и пользовательские типы, что часто указывает на использование именно этой СУБД. MySQL и MariaDB ограничены стандартными типами, с акцентом на TEXT, ENUM и SET. SQL Server использует NVARCHAR, DATETIME2 и схемы с именами, разделёнными точкой.
Документно-ориентированные хранилища, например MongoDB, формируют коллекции без фиксированной схемы. Их структура выражается через вложенные документы и массивы, а не через таблицы и связи. Cassandra и другие колоночные СУБД используют ключевые пространства и столбцовые семейства, что отличается от классической реляционной модели.
Анализ схем и структуры данных помогает не только идентифицировать тип СУБД, но и понять особенности хранения и ограничения на уровне модели. В проектах с гибридной архитектурой такие наблюдения позволяют определить, какие части данных обрабатываются реляционно, а какие – через документное или колоночное хранилище.
Использование утилит администрирования для идентификации СУБД
Утилиты администрирования позволяют определить тип СУБД, подключаясь к серверу или анализируя файлы данных. Важны как командные инструменты, так и графические оболочки, которые предоставляют сведения о версии и диалекте.
- PostgreSQL: psql позволяет выполнить команду \conninfo или SELECT version(); для получения версии сервера и информации о диалекте.
- MySQL / MariaDB: mysql CLI и MySQL Workbench предоставляют SHOW VARIABLES LIKE ‘version%’; и SELECT @@version, @@version_comment;.
- SQL Server: sqlcmd или SQL Server Management Studio позволяют использовать SELECT @@VERSION; для идентификации типа и сборки сервера.
- Oracle: SQL*Plus или Oracle SQL Developer с командой SELECT * FROM v$version; показывает версию и тип базы.
- MongoDB: mongo shell с командой db.version() выявляет версию и позволяет подтвердить документное хранилище.
Для локальных файловых СУБД, таких как SQLite, утилита sqlite3 с командой PRAGMA database_list; предоставляет сведения о подключенных файлах и их структуре. Важно проверять доступные консольные и GUI-инструменты, так как они дают быстрый и точный способ идентификации даже при ограниченном доступе к коду.
Вопрос-ответ:
Как быстро определить, какая СУБД используется в проекте без доступа к коду?
Если исходный код недоступен, стоит проверить открытые порты и активные сервисы на сервере. Например, порт 5432 указывает на PostgreSQL, 3306 — на MySQL/MariaDB, 1433 — на SQL Server. Также полезно использовать утилиты администрирования, которые могут подключиться к серверу и показать его тип и версию.
Можно ли определить СУБД по файлам проекта и расширениям?
Да, многие базы данных оставляют характерные файлы. SQLite использует файлы с расширением .sqlite или .db, MySQL — .frm и .ibd, SQL Server — .mdf и .ldf. Анализ таких файлов помогает определить тип хранилища без доступа к настройкам подключения.
Как строки подключения помогают узнать тип базы данных?
Строки подключения содержат хост, порт и драйвер. Префиксы вроде postgresql:// или mysql:// прямо указывают на СУБД. В переменных окружения часто встречаются ключи DATABASE_URL, DB_CONNECTION или SQLALCHEMY_DATABASE_URI, значения которых можно проверить на наличие портов и драйверов.
Можно ли определить СУБД по синтаксису SQL-запросов?
Да, разные СУБД используют специфический синтаксис. PostgreSQL применяет тип SERIAL и ключевое слово ILIKE, MySQL использует AUTO_INCREMENT, SQL Server — IDENTITY, а Oracle — SEQUENCE и VARCHAR2. Анализ этих конструкций в коде или дампах базы помогает выявить диалект.
Какие утилиты помогут точно определить СУБД в проекте?
Для реляционных баз данных можно использовать psql для PostgreSQL, mysql CLI для MySQL, sqlcmd для SQL Server и SQL*Plus для Oracle. Для SQLite подходит sqlite3, для MongoDB — mongo shell. Эти инструменты позволяют подключиться к базе и получить сведения о версии, диалекте и структуре схем.
