用戶2055117494949
嗨,老鐵,先說說數據庫設計的注意事項,最近一個項目中,數據庫表結構的設計都是由我來設計,在設計的過程中,並沒有考慮到性能的因素,所以在規定字段類型的時候,為了省事把許多字段一律設置成varchar類型,varchar類型即為字符串類型,因為varchar類型確實很強大,什麼東西都可以存,如果不考慮性能的話,這一個類型基本就可以滿足日常的需求了,但是如果考慮到性能,那肯定不能全部用varchar!
那麼就要提到數據類型了,在java中有以下幾種基本類型:
float 4 字節 32位IEEE 754單精度
double 8 字節 64位IEEE 754雙精度
byte 1字節 -128到127
short 2 字節 -32,768到32,767
int 4 字節 -2,147,483,648到2,147,483,647
long 8 字節 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
char 2 字節
boolean 1 字節 True或者false
String 不屬於基本類型,這是以前考試會經常考的!
這些都只是基礎知識,似乎在開發中無關緊要,毫無意義! 錯了, 看到後面的字節數了嗎? 意義來了, 當我們把數據存在數據庫中的時候,這些字節數就顯得非常重要,因為要影響到性能了,我們來看看用varchar存放的時候是什麼情況:
java代碼:
String chinese1 = "你好";
String chinese2 = "你喝水嗎";
String chinese3 = "12233444";
String chinese4 = "fuck you man";
System.out.println("chinese1佔的字節"+chinese1.getBytes().length);
System.out.println("chinese2佔的字節"+chinese2.getBytes().length);
System.out.println("chinese3佔的字節"+chinese3.getBytes().length);
System.out.println("chinese4佔的字節"+chinese4.getBytes().length);
控制檯輸出:
chinese1佔的字節6
chinese2佔的字節12
chinese3佔的字節8
chinese4佔的字節12
存在數據庫中的時候字符串所佔的字節數是根據實際內容的長度來確定的,也就是說,如果你存放的是數字,12233444如果用int型存放的話只需要4個字節,用字符串存放需要的就是8個字節,長度越長字節越高! 如果數據庫存的數據量不大,那當然沒有區別,如果存放的數據量巨大的話,性能的差異就會體現出來了!
所以說,剛剛畢業的時候一直搞不清楚為什麼老是問這些簡單的問題,原來還是有用的啊! 所以,數據庫設計的時候不要把類型都定義成varchar ,時間類型如20200326,這種的也可以用int來存放,這樣就又節省了一些空間了! 數據類型設計注意要設計的合適這個字段才是最恰當的!
接下來說說java數據傳輸的安全性:
程序分成前臺和後臺,前臺調用後臺的時候,通過http請求到後臺的servlet中,攜帶一些參數,然後後臺通過解析這些參數去操作數據庫。 所以這些參數中很可能帶有數據庫中非常重要的字段,例如主鍵id,或者你的賬號名稱,密碼之類的。現在壞人很多,而且壞人也很厲害,他們能截取你的通信數據,如果獲得到這些重要的字段他們也許可以做一些壞事,去破壞你的數據庫! 所以前臺和後臺之間的數據交互安全性很重要, 所以很多接口的使用都使用到了token, token是一串毫無意義的字符串,被壞人知道了,他也很無奈,沒有用! 但是這個token卻是後臺和前臺通信的密碼。
原理是這樣的, 後臺把ID存在內存中,java中其實就是 定義一個static類型的 Map , key 就是token,value就是數據中的id字段,或者別的不願意透露給前臺的字段,tocken是隨機字符串!把token告訴前臺,以後前臺要取數據,直接把token傳回來,然後去用token取出這個存放的ID,token一般是在登錄後返回的,如果token不正確,那就要讓它重新登錄了!這樣就可以防止數據洩露! 這種方法比直接傳ID要安全的多!
向上的孟哥
數據庫安全一方面是系統運行安全系統運行安全通常收到的威脅如:一些網絡不法分子通過網絡,局域網等途徑通過入侵電腦使系統無法正常啟動,或超負荷讓計算機運行大量算法,並關閉cpu風扇,使cpu過熱燒壞等破壞性活動。
另一方面是系統信息安全,系統安全通常收到的威脅是黑客對數據庫入侵,並盜取想要的資料。數據庫的安全員主要是針對數據而言,包括數據獨立性,數據安全性,數據完整性,併發控制,故障恢復等幾個方面。網絡的開放性給數據庫系統安全帶來了嚴重的安全隱患。
咕嚕手繪
1、所有的SQL exception 信息都不能直接返回給客戶端。
2、在任何情況下使用完Connection後都要釋放連接,特別是在拋出異常的時候也要釋放Connection。
3、表中的用戶敏感信息要加密存儲,最好在加密的時候加入幾位隨機數。
4、所有的數據庫訪問都用preparestatement的方式或者封裝為存儲過程。
5、配置文件中的數據庫訪問用戶名和密碼都加密並編碼存放。
6、系統上線運行時,僅給數據庫用戶必要的權限。