Трудно сказать, функция Jpa чуть не заставила меня потерять работу

Java

предыстория истории

Некоторое время назад друг спросил меня в 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