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

猿天地 猿天地     2022-12-26     319

关键词:

故事背景

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

故事细节

在 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 的时候被指了出来,然后就去掉了。虽然说是为了使用更方便,但是增加了线上数据库的风险。像一些开源框架中也有类似的逻辑,当表不存在时会自动给你创建好表。

关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。

因为一个跨域请求,我差点丢了饭碗!

...什么Cookie,LocalStorage,SessionStorage之类的都归他管。哦,差点忘了,还有一个妹子小雪,她负责网页渲染。随后主管安排了我的工作:老白从网络取回网页之后交 查看详情

因为一个跨域请求,我差点丢了饭碗(代码片段)

...什么Cookie,LocalStorage,SessionStorage之类的都归他管。哦,差点忘了,还有一个妹子小雪,她 查看详情

因为一个跨域请求,我差点丢了饭碗(代码片段)

...什么Cookie,LocalStorage,SessionStorage之类的都归他管。哦,差点忘了,还有一个妹子小雪,她 查看详情

万恶的npe差点让我半个月工资没了(代码片段)

引言最近看到《阿里巴巴Java开发手册》(公众号回复[开发手册]免费获取)第11条规范写到:防止NPE,是程序员的基本修养NPE(NullPointerException)一直是开发中最头疼的问题,也是最容易忽视的地方。记得刚开始工作的时候所在的项目... 查看详情

这个 JPA 映射究竟是如何工作的?

】这个JPA映射究竟是如何工作的?【英文标题】:HowexactlyworksthisJPAmapping?【发布时间】:2015-01-1016:26:25【问题描述】:我正在学习SpringCore认证,但我对课程幻灯片上的这个JPA示例有一些疑问:有2个实体类映射2个表:1)映射T_CUSTO... 查看详情

一个hashcode问题的追问,差点让我陷入无底洞(代码片段)

一个HashCode问题的追问,差点让我陷入无底洞内存溢出VS内存泄漏这两个词在中文解释上有些相似,至少给我的第一感觉,他们的差别是这样的(有人和我一样吗?)作者:an日拱一兵来源:日拱一兵|2020-08-0408:44收藏分享你有一个思... 查看详情

[转帖]浅谈mybatis和jpa的区别

...jpa,两个持久层框架。从底层到用法都不同。但是实现的功能是一样的。所以说一直以来颇有争议。常年混迹于各大qq技术交流群。见过jpa的死忠粉也见过mybatis的铁杆。作为一个不到两年工作经验的小菜鸟来说,你让我分析源码... 查看详情

citrixlicensinghelp

 Error:Previousuploadtocitrix.comfailed"NetworkErrorwhenconnectingcitrix.com"withcode5 今天突然一个朋友给我丢了一个错误CitrixLIC控制台报错如下: 650)this.width=650;"src="http://s2.51cto.com/wyfs02/M02/86/E8/wK 查看详情

daynine,很尴尬,差点不会拼nine了。。

九月六日周三帝都大晴天+大阴天新生报到诶今天。对我这个老帮菜来说,就是来了一群和我抢食堂,抢图书馆,抢打印店的人。。敲了一整天的代码,总算把这个坑爹的系统做完了。。简直心力憔悴。。不过,这样的生活真的... 查看详情

JPA 自动完成功能在 Intellij spring-boot kotlin 项目中不起作用

...现JPA自动完成不再像javaJPA那样工作。有什么建议可以让这个自动完成 查看详情

JPA @SequenceGenerator 注释如何工作

...,它会自动为实体的数字身份字段/属性分配一个值。Q1.这个序列生成器是利用数据库不断增加的数值生成能力还是自己生成数字?Q2.如果JPA使 查看详情

百度版chatgpt:文心一言发布会盛大召开!

...度版ChatGPT:文心一言发布会召开了。(图一)投资者对这个发布会的反应非常直接:股价当场断崖式下跌。(图二)和ChatGPT发布会上现场功能演示不同,百度发布会的所有功能演示都是提前录制好的,而且也不对大众开放,只... 查看详情

用jsonp实现搜索框功能的实现

...好的习惯就是把最近在做的东西放桌面)。今天想彻底把这个问题搞明白。用jquery 查看详情

努力让我的“开始/停止”按钮和“重置”按钮工作

...1-10-2105:16:40【问题描述】:我对编程很陌生,我正在做的这个新项目花费的时间比预期的要长(与编程一样)这个“25+5时钟”需要我添加一个开始/停止按钮和一个重置按钮我的倒计时,它不能低于00:00。我知道这是基本的,但... 查看详情

关于作者-标题最少5个字?

其他平台上的账号,方面自己找。之前有个自定义专栏功能,现在也没了,csdn一言难尽。公众号图片被禁用放个链接吧,csdn这个产品有点无语https://mp.weixin.qq.com/s/YZdQuI_GbNDbcx4wxB8hVg 查看详情

由spring数据jpa为了不工作时,列值是具有标签

...不正确产生的结果。通常在SQL查询中,我们可以使用裁剪功能,并通过将工作秩序。在JPA即使我修剪它不工作,因为微调仅适用于产生的结果的属性。虽然我想那是什么 查看详情

实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

...接到项目中的一个功能,要实现excel的导入,导出功能。这个看起来思路比较清楚,但是做起了就遇到了不少问题。不过核心的问题,大家也不会遇到了。每个项目前台页面,以及数据填充方式都不一样,不过大多都是以json数据... 查看详情

就因为json.stringify,我的年终奖差点打水漂了(代码片段)

...步,前面分享过一篇JSON.stringify的文章,今天来看这个,喜欢记得关注我并设为星标。前言❝开发要对线上环境有一颗敬畏之心,任何一个点都有可能导致线上故障,也有可能让你的年终奖泡汤(⊙︿⊙)。比如... 查看详情