前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。
为抚松等地区用户提供了全套网页设计制作服务,及抚松网站建设行业解决方案。主营业务为成都网站制作、网站建设、抚松网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。
在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。
其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。
这个配置就是: spring.jpa.hibernate.ddl-auto
应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。
应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。
程序停止的时候会将数据库中所有表删除掉。
应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会判断有没有新增字段或者修改长度之类的,如果有则会更新表结构,不会影响数据。
validate 不会更新和删除表或者数据,只会做验证逻辑。
禁用 ddl 操作。
这种问题归根到底还是技术负责人没重视线上安全问题,主要有下面几点:
线上数据一定要有备份,而且备份得放在不同的机器上,降低风险值。
如果公司有 DBA 那么可能会好点,对数据库相关的安全会管控的比较严。如果没有 DBA,基本上都是开发自己管理,技术负责人应该去做这件事情。
一般的开发人员可以给只读账号就行了,偶尔线上查查数据之类的。
另外需要有一个读写的账号,用于程序中。
像删除,DDL 操作这种权限就留给管理员账号就行了,不然很容易出事。
这次的问题,除了开发人员的大意,最主要就是框架中自带了 DDL 的功能。像这种功能就应该禁止使用。
所有的表结构应该在上线之前确认好,最好手动执行,像 DDL 这种操作本身就会锁表,应该在业务低峰期去做。交给程序自动做不靠谱。
我记得我们之前在代码中也有去自动创建表的逻辑,在 code review 的时候被指了出来,然后就去掉了。虽然说是为了使用更方便,但是增加了线上数据库的风险。像一些开源框架中也有类似的逻辑,当表不存在时会自动给你创建好表。
当前标题:一言难尽,Jpa这个功能差点让我丢了工作
路径分享:http://www.mswzjz.cn/qtweb/news2/8902.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能