JPA 這個功能差點讓我丟了工作!

2021-10-11 04:07:23 字數 1069 閱讀 1021

在 spring boot 中使用 jpa 來運算元據庫,jpa 就不做詳細的介紹了,相信大家都有所了解或者也用過。

在 jpa 中有乙個配置項,可以讓程式在啟動的時候自動初始化表結構或者更新表結構的功能。聽上去很不錯,非常實用。

其實這是乙個非常危險的功能,個人覺得不應該提供這種功能,只要留了口子就有可能會出問題。

這個配置就是:spring.jpa.hibernate.ddl-auto

應用啟動的時候,如果資料庫中沒有對應的表,就會自動根據實體類的結構建立乙個表結構。如果表已經存在了就會將表中的資料清空。

應用啟動的時候,如果資料庫中沒有對應的表,就會自動根據實體類的結構建立乙個表結構。如果表已經存在了就會將表中的資料清空。

程式停止的時候會將資料庫中所有表刪除掉。

應用啟動的時候,如果資料庫中沒有對應的表,就會自動根據實體類的結構建立乙個表結構。如果表已經存在了就會判斷有沒有新增字段或者修改長度之類的,如果有則會更新表結構,不會影響資料。

validate 不會更新和刪除表或者資料,只會做驗證邏輯。

禁用 ddl 操作。

這種問題歸根到底還是技術負責人沒重視線上安全問題,主要有下面幾點:

線上資料一定要有備份,而且備份得放在不同的機器上,降低風險值。

如果公司有 dba 那麼可能會好點,對資料庫相關的安全會管控的比較嚴。如果沒有 dba,基本上都是開發自己管理,技術負責人應該去做這件事情。

一般的開發人員可以給唯讀賬號就行了,偶爾線上查查資料之類的。

另外需要有乙個讀寫的賬號,用於程式中。

像刪除,ddl 操作這種許可權就留給管理員賬號就行了,不然很容易出事。

這次的問題,除了開發人員的大意,最主要就是框架中自帶了 ddl 的功能。像這種功能就應該禁止使用。

所有的表結構應該在上線之前確認好,最好手動執行,像 ddl 這種操作本身就會鎖表,應該在業務低峰期去做。交給程式自動做不靠譜。

我記得我們之前在**中也有去自動建立表的邏輯,在 code review 的時候被指了出來,然後就去掉了。雖然說是為了使用更方便,但是增加了線上資料庫的風險。像一些開源框架中也有類似的邏輯,當表不存在時會自動給你建立好錶。

老人走丟後 女兒竟用iPhone的這個功能給找回

11月24日訊息,蘋果手機有一項功能,叫做 find my iphone 一般用於手機丟失之後定位查詢,然而有人卻利用這項功能把走丟的人給找回來了。據報道,台灣有一名七旬老人獨自外出後長時間未回,家人擔心出事遂報警求助。接報登山搜尋,而走丟老人的女兒憑藉父親iphone手機內的定位程式,快速鎖定其位...

這個世界欠我的,我遲早讓加倍償還!

自從13年8月末離職中科軟,樓主邊看書看找工作,每天7點起床,8點歸家,到9月底的時候,已經拿到3個offcer 有兩家公司通知10.1後入職,軟通動力在面試成功的第二天通知去體檢報到。你可知道我從中科軟離職,是因為吃不起飯了嗎?我要嘗試為錢工作,我的理想,忠誠呀統統滾蛋,你可知道離漲薪已經過去了2...

但願有人看到這個讓我失眠的問題!

問題一 堆記憶體是不是不一定多大啊?下面這個copy來的測試堆記憶體的程式每次執行的結果都不一樣呢?void main catch std bad alloc 問題二 上面的程式是故意不釋放記憶體,也就是故意讓記憶體洩露,這樣才能測試堆記憶體。只要該程式一結束就自動釋放。不用關閉vs。是這個意思嗎?...