MySQL - в каком файле выполняется запрос - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь отследить проблему, мне нужно знать, в каком файле выполняется определенный запрос, можно ли посмотреть, какой файл выполняет команду?

Я включил general_log и могу см. запрос.

1 Ответ

1 голос
/ 16 марта 2020

Невозможно просто определить из запроса SQL, какой файл кода запускает его.

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

Но во многих языках программирования верно, что соединение с базой данных создается одним файлом, а запросы формируются в других файлах кода. Они могут даже быть сформированы из другого файла кода, который в конечном итоге отправляет запрос на сервер MySQL для выполнения.

Вам необходимо прочитать код и понять, как формируются и выполняются запросы.

Некоторые программисты добавляют комментарии к своим SQL запросам, которые в конечном итоге попадают в журнал запросов.

$sql = "/* File: reports.php; Line: 278 */ SELECT * FROM mytable WHERE col1 = ? ORDER BY blah";

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

Обратите внимание, что это не работает для запросов, выполняемых клиентом mysql, поскольку этот клиент удаляет комментарии перед выполнением запросов.


Re Ваш комментарий:

Если вы считаете, что ваша база данных взломана, то сначала вы должны убедиться, что ваша сетевая безопасность достаточна для предотвращения доступа внешних клиентов к вашей базе данных. То есть, только ваше собственное приложение должно быть разрешено для подключения. Вы можете сделать это с помощью комбинации сетевых брандмауэров и операторов SQL GRANT.

Удивительно, сколько людей работает с базами данных на сервере, который имеет доступ к inte rnet! Если это вы, то вам следует немедленно это исправить. Сними свой сайт, пока не сделаешь. Это небезопасно.

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

Если вы используете слой доступа к базе данных, вам может потребоваться сделать это только в одном месте. Если у вас есть SQL запросов, разбросанных по всему приложению, потребуется больше работы, потому что вам придется редактировать каждый файл, пока вы не выясните, какой из них является источником запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...