www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]作者:尹吉?dú)g,來(lái)自:猿天地 故事背景 前陣子,有位朋友在微信上問(wèn)我數(shù)據(jù)被刪了能不能恢復(fù),我問(wèn)了下原因,居然是因?yàn)橐粋€(gè)配置項(xiàng)惹的禍。 故事細(xì)節(jié) 在 Spring Boot 中使用 jpa 來(lái)操作數(shù)據(jù)庫(kù),jpa 就不做詳細(xì)的介紹了,相信大家都有所了解或者也用過(guò)。 在 jpa

一言難盡,Jpa這個(gè)功能差點(diǎn)讓我丟了工作

作者:尹吉?dú)g,來(lái)自:猿天地


故事背景

前陣子,有位朋友在微信上問(wèn)我數(shù)據(jù)被刪了能不能恢復(fù),我問(wèn)了下原因,居然是因?yàn)橐粋€(gè)配置項(xiàng)惹的禍。

一言難盡,Jpa這個(gè)功能差點(diǎn)讓我丟了工作

故事細(xì)節(jié)

在 Spring Boot 中使用 jpa 來(lái)操作數(shù)據(jù)庫(kù),jpa 就不做詳細(xì)的介紹了,相信大家都有所了解或者也用過(guò)。

在 jpa 中有一個(gè)配置項(xiàng),可以讓程序在啟動(dòng)的時(shí)候自動(dòng)初始化表結(jié)構(gòu)或者更新表結(jié)構(gòu)的功能。聽(tīng)上去很不錯(cuò),非常實(shí)用。

其實(shí)這是一個(gè)非常危險(xiǎn)的功能,個(gè)人覺(jué)得不應(yīng)該提供這種功能,只要留了口子就有可能會(huì)出問(wèn)題。

這個(gè)配置就是:spring.jpa.hibernate.ddl-auto

  • create( 危險(xiǎn)系數(shù) 2 顆星

應(yīng)用啟動(dòng)的時(shí)候,如果數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)的表,就會(huì)自動(dòng)根據(jù)實(shí)體類(lèi)的結(jié)構(gòu)創(chuàng)建一個(gè)表結(jié)構(gòu)。如果表已經(jīng)存在了就會(huì)將表中的數(shù)據(jù)清空。

  • create-drop( 危險(xiǎn)系數(shù) 3 顆星

應(yīng)用啟動(dòng)的時(shí)候,如果數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)的表,就會(huì)自動(dòng)根據(jù)實(shí)體類(lèi)的結(jié)構(gòu)創(chuàng)建一個(gè)表結(jié)構(gòu)。如果表已經(jīng)存在了就會(huì)將表中的數(shù)據(jù)清空。

程序停止的時(shí)候會(huì)將數(shù)據(jù)庫(kù)中所有表刪除掉。

  • update( 危險(xiǎn)系數(shù) 1 顆星

應(yīng)用啟動(dòng)的時(shí)候,如果數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)的表,就會(huì)自動(dòng)根據(jù)實(shí)體類(lèi)的結(jié)構(gòu)創(chuàng)建一個(gè)表結(jié)構(gòu)。如果表已經(jīng)存在了就會(huì)判斷有沒(méi)有新增字段或者修改長(zhǎng)度之類(lèi)的,如果有則會(huì)更新表結(jié)構(gòu),不會(huì)影響數(shù)據(jù)。

  • validate( 危險(xiǎn)系數(shù) 0 顆星

validate 不會(huì)更新和刪除表或者數(shù)據(jù),只會(huì)做驗(yàn)證邏輯。

  • none ( 危險(xiǎn)系數(shù) 0 顆星

禁用 ddl 操作。

如何防范

這種問(wèn)題歸根到底還是技術(shù)負(fù)責(zé)人沒(méi)重視線(xiàn)上安全問(wèn)題,主要有下面幾點(diǎn):

  • 數(shù)據(jù)沒(méi)備份

線(xiàn)上數(shù)據(jù)一定要有備份,而且備份得放在不同的機(jī)器上,降低風(fēng)險(xiǎn)值。

  • 數(shù)據(jù)庫(kù)賬號(hào)權(quán)限細(xì)分,不給刪除權(quán)限,業(yè)務(wù)做邏輯刪除

如果公司有 DBA 那么可能會(huì)好點(diǎn),對(duì)數(shù)據(jù)庫(kù)相關(guān)的安全會(huì)管控的比較嚴(yán)。如果沒(méi)有 DBA,基本上都是開(kāi)發(fā)自己管理,技術(shù)負(fù)責(zé)人應(yīng)該去做這件事情。

一般的開(kāi)發(fā)人員可以給只讀賬號(hào)就行了,偶爾線(xiàn)上查查數(shù)據(jù)之類(lèi)的。

另外需要有一個(gè)讀寫(xiě)的賬號(hào),用于程序中。

像刪除,DDL 操作這種權(quán)限就留給管理員賬號(hào)就行了,不然很容易出事。

  • 應(yīng)用中的框架有 DDL 操作的功能,一律禁止使用

這次的問(wèn)題,除了開(kāi)發(fā)人員的大意,最主要就是框架中自帶了 DDL 的功能。像這種功能就應(yīng)該禁止使用。

所有的表結(jié)構(gòu)應(yīng)該在上線(xiàn)之前確認(rèn)好,最好手動(dòng)執(zhí)行,像 DDL 這種操作本身就會(huì)鎖表,應(yīng)該在業(yè)務(wù)低峰期去做。交給程序自動(dòng)做不靠譜。

我記得我們之前在代碼中也有去自動(dòng)創(chuàng)建表的邏輯,在 code review 的時(shí)候被指了出來(lái),然后就去掉了。雖然說(shuō)是為了使用更方便,但是增加了線(xiàn)上數(shù)據(jù)庫(kù)的風(fēng)險(xiǎn)。像一些開(kāi)源框架中也有類(lèi)似的邏輯,當(dāng)表不存在時(shí)會(huì)自動(dòng)給你創(chuàng)建好表。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

一言難盡,Jpa這個(gè)功能差點(diǎn)讓我丟了工作

長(zhǎng)按訂閱更多精彩▼

一言難盡,Jpa這個(gè)功能差點(diǎn)讓我丟了工作

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉