предыстория истории
Некоторое время назад друг спросил меня в WeChat, можно ли восстановить данные после удаления, я спросил причину, но это было из-за элемента конфигурации.
Подробности истории
Использование jpa для работы с базой данных в Spring Boot, jpa не будет подробно описываться, я думаю, что все его знают или использовали.
В jpa есть элемент конфигурации, который позволяет программе автоматически инициализировать структуру таблицы или обновлять структуру таблицы при запуске. Звучит здорово и очень полезно.
На самом деле, это очень опасная функция, лично мне не следует предоставлять эту функцию, просто оставьте дыру, может возникнуть проблема.
Эта конфигурация:spring.jpa.hibernate.ddl-auto
- Создайте(Фактор риска 2 звезды)
При запуске приложения, если в базе данных нет соответствующей таблицы, оно автоматически создаст структуру таблицы на основе структуры класса сущностей. Если таблица уже существует, данные в таблице будут очищены.
- создать-сброс(Фактор риска 3 звезды)
При запуске приложения, если в базе данных нет соответствующей таблицы, оно автоматически создаст структуру таблицы на основе структуры класса сущностей. Если таблица уже существует, данные в таблице будут очищены.
Когда программа остановится, все таблицы в базе данных будут удалены.
- Обновить(Фактор риска 1 звезда)
При запуске приложения, если в базе данных нет соответствующей таблицы, оно автоматически создаст структуру таблицы на основе структуры класса сущностей. Если таблица уже существует, она определит наличие новых полей или изменит длину и т. д. Если есть, структура таблицы будет обновлена, не затрагивая данные.
- подтвердить(Фактор риска 0 звезд)
validate не обновляет и не удаляет таблицы или данные, а только выполняет логику проверки.
- НИКТОФактор риска 0 звезд)
Отключите операции с ddl.
Как предотвратить
В конечном счете, такая проблема заключается в том, что ответственное техническое лицо не обращает внимания на проблему онлайн-безопасности.Основные моменты заключаются в следующем:
- данные не скопированы
Онлайн-данные должны быть скопированы, а резервная копия должна быть размещена на другом компьютере, чтобы снизить значение риска.
- Подразделение разрешений учетной записи базы данных, не удалять разрешения, удаление бизнес-логики
Если в компании есть администратор базы данных, это может быть лучше, и безопасность, связанная с базой данных, будет контролироваться более строго. Если администратора базы данных нет, разработка в основном управляется сама собой, и этим должен заниматься ответственный технический специалист.
Рядовые разработчики могут дать учетную запись только для чтения и время от времени проверять данные онлайн.
Кроме того, для программы требуется учетная запись для чтения и записи.
Как и удаление, операция DDL остается за учетной записью администратора, иначе легко попасть в беду.
- Фреймворк в приложении имеет функцию работы DDL, и ее использование запрещено.
Проблема на этот раз, в дополнение к небрежности разработчика, является функцией DDL, которая поставляется с рамки. Такие особенности, как это должно быть запрещено.
Все структуры таблиц должны быть подтверждены перед подключением к сети, и лучше всего выполнять их вручную.Операции, такие как DDL, блокируют саму таблицу и должны выполняться в периоды низкой деловой активности. Не стоит оставлять программе делать это автоматически.
Помнится, у нас и раньше была логика автоматического создания таблиц в коде, на нее указывали при код-ревью, а потом убирали. Хотя говорят, что он более удобен в использовании, он увеличивает риск онлайн-баз данных. Как и в некоторых фреймворках с открытым исходным кодом, существует аналогичная логика, когда таблица не существует, она автоматически создаст для вас таблицу.
Об авторе: Инь Цзихуань, энтузиаст простых технологий, автор книг «Микросервисы Spring Cloud — технология полного стека и анализ конкретных случаев», «Практическое и продвинутое введение в микросервисы Spring Cloud», официальный аккаунт.обезьяний мирспонсор.
Если вам интересно, вы можете подписаться на мой публичный аккаунт в WeChat.обезьяний мир, читать больше технических статей в первый раз. У меня также есть открытый исходный код на моем GitHub.github.com/yinjihuan