专栏首页猿天地一言难尽,Jpa这个功能差点让我丢了工作

一言难尽,Jpa这个功能差点让我丢了工作

故事背景

前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。

故事细节

在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。

在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。

其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。

这个配置就是:spring.jpa.hibernate.ddl-auto

  • create(危险系数 2 颗星

应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。

  • create-drop(危险系数 3 颗星

应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。

程序停止的时候会将数据库中所有表删除掉。

  • update(危险系数 1 颗星

应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会判断有没有新增字段或者修改长度之类的,如果有则会更新表结构,不会影响数据。

  • validate(危险系数 0 颗星

validate 不会更新和删除表或者数据,只会做验证逻辑。

  • none (危险系数 0 颗星

禁用 ddl 操作。

如何防范

这种问题归根到底还是技术负责人没重视线上安全问题,主要有下面几点:

  • 数据没备份

线上数据一定要有备份,而且备份得放在不同的机器上,降低风险值。

  • 数据库账号权限细分,不给删除权限,业务做逻辑删除

如果公司有 DBA 那么可能会好点,对数据库相关的安全会管控的比较严。如果没有 DBA,基本上都是开发自己管理,技术负责人应该去做这件事情。

一般的开发人员可以给只读账号就行了,偶尔线上查查数据之类的。

另外需要有一个读写的账号,用于程序中。

像删除,DDL 操作这种权限就留给管理员账号就行了,不然很容易出事。

  • 应用中的框架有 DDL 操作的功能,一律禁止使用

这次的问题,除了开发人员的大意,最主要就是框架中自带了 DDL 的功能。像这种功能就应该禁止使用。

所有的表结构应该在上线之前确认好,最好手动执行,像 DDL 这种操作本身就会锁表,应该在业务低峰期去做。交给程序自动做不靠谱。

我记得我们之前在代码中也有去自动创建表的逻辑,在 code review 的时候被指了出来,然后就去掉了。虽然说是为了使用更方便,但是增加了线上数据库的风险。像一些开源框架中也有类似的逻辑,当表不存在时会自动给你创建好表。

相关推荐

本文分享自微信公众号 - 猿天地(cxytiandi),作者:尹吉欢

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Cannot create a session after the response has been committed

    来源:猿天地 链接:http://cxytiandi.com/blog/detail/1699 刚好今天博客功能正式上线,然而上线之后出了一个bug java....

    猿天地
  • 10分钟搞懂:亿级用户的分布式数据存储解决方案!

    分布式数据库和分布式存储是分布式系统中难度最大、挑战最大,也是最容易出问题的地方。互联网公司只有解决分布式数据存储的问题,才能支撑更多次亿级用户的涌入。

    猿天地
  • Spring Boot Actuator监控页面报错解决

    今天在访问Spring Boot Actuator监控页面的时候报错了,之前都没遇到这种情况,大概的意思就是无权限访问 <html> <body> <...

    猿天地
  • 如何编写 WPF 的标记扩展 MarkupExtension,即便在 ControlTemplate/DataTemplate 中也能生效

    发布于 2018-05-29 12:56 更新于 2018-05...

    walterlv
  • Vue2.5笔记:Vue中的模版

    我们在上一篇说到如何把 Vue 实例中的数据显示到视图中,就会需要用到我们的模版,我们只是简单的使用了一些,模版其实还有很多其他的特性。今天我们就来看看模版的其...

    六小登登
  • Gumbel softmax在可微NAS的作用是什么?

    可微NAS(Differentiable Neural Architecture Search, DNAS)是指以可微的方式搜索网络结构,比较经典的算法是DAR...

    marsggbo
  • 继推出科创板,证监会将统筹推进新三板创业板改革丨科创板报

    科创板将给新三板、创业板带来最宝贵的“改革效应”,三者之间也可以彼此激励,形成良性的竞争。

    镁客网
  • 「首席架构看领域驱动设计」领域驱动的设计和开发最佳实践

    域驱动设计(DDD)是关于将业务域概念映射到软件构件的。关于这个主题的大多数文章和文章都是基于Eric Evans的《领域驱动设计》一书,主要从概念和设计的角度...

    首席架构师智库
  • 信息爆炸?云上的机器人连接一切|TW洞见

    金明 ThoughtWorks 前段时间,一条科技新闻惊爆整个互联网:微软举债262亿美元现金收购LinkedIn,创下科技史上收购价第三高的记录。 1 为何要...

    ThoughtWorks
  • body标签中相关标签

    字体标签包含:h1~h6、<font>、<u>、<b>、<strong><em>、<sup>、<sub>

    py3study

扫码关注云+社区

领取腾讯云代金券