2013-11-16 3 views
-1

Здравствуйте, у меня есть небольшая база данных с 7 таблицами внутри нее и несколько вариантов с сайта PHP для вставки и обновления. По неизвестной причине некоторые из записей внутри базы данных удаляются в случайном порядке, и я не знаю, что может вызвать это. Любая идея, как наблюдать эту проблему или что делать? Есть ли способ ограничить всю базу данных, чтобы удалить параметр, который нужно отключить?Записи MySQL удаляются по неизвестным причинам

+0

Если у вас есть URL-адреса, у которых есть идентификатор для удаления, Google может сканировать их –

+0

Проверьте также триггеры. – Mihai

ответ

0

Возможно создание пользователя MySQL, который не может удалять строки или делать что-либо еще неприятное. Затем можно изменить программу, чтобы использовать этого пользователя MySQL, а не то, что в настоящее время используется (ищите там, где настроено соединение MySQL, возможно, из файла конфигурации).

Войти в MySQL. Затем создать ограниченный пользователь, используя что-то вроде:

GRANT SELECT on database_name.* to 'read-only-user' IDENTIFIED BY 'some-password'; 
FLUSH PRIVILEGES; 

Вот полезная документация страницы: http://dev.mysql.com/doc/refman/5.1/en/grant.html. Если ваше приложение должно иметь возможность делать больше, чем просто читать, приспособите приведенное выше к чему-то вроде GRANT SELECT, INSERT, UPDATE. Для получения дополнительной информации обратитесь к ссылке.

Что касается поиска причины проблемы, это зависит от того, как написано ваше приложение (используется ли ORM для доступа к базе данных и т. Д.). Вы можете обнаружить, что ваши ошибки приложения, как только вы ограничиваете пользователя, как указано выше; это хорошо, если это так, поскольку сообщение об ошибке должно показать вам, где искать.

В противном случае, если все для вашей базы данных проходит через центральное место, возможно, вы сможете добавить некоторые записи в приложение (или, возможно, для этого в вашем приложении есть какой-либо параметр конфигурации). Если инструкции SQL разбросаны повсюду, вы можете попробовать выполнить поиск кода для DELETE или DELETE FROM (без учета регистра). В качестве альтернативы вы можете настроить ведение журнала для запросов в самой MySQL, но это не так просто, и все равно не сообщит вам, где в приложении выполняются DELETE (но если другие подходы не удастся, это, по крайней мере, даст вам больше информации о том, где искать).

Смежные вопросы