項目適 Oracle改造及SSL安全性配置問題匯總詳解
目錄
- 背景
- Oracle 適配點
- 其他低級錯誤
- 高級問題
- 工具思維
- 開發啟示錄
背景
項目開發初期使用 MySQL ,后期需要適配 Oracle ,總結適配過程及多數據庫支持時,從開發初期就需要考慮的幾點。
另外,總結幾點最近半年開發過程中的技術問題。坑都填了,也該是時候記錄一下填坑的經過了,要不然下次可能還會踏入同一個坑。
Oracle 適配點
- 表名稱長度限制,支持 Oracle 12C 以下是需要考慮 30個字符的限制。
- Oracle 關鍵字
USER
不能亂用做別名.跟 MySQL 不一樣,Oracle 有一張特殊的用戶表名稱就是USER
。 - Oracle 沒有默認轉義符號,支持模糊查詢時,需要手動編寫查詢語句指定 ESCAPE 字符。這點 MyBatisPlus 插件的模糊查詢愛莫能助,所以還是需要自定義模糊查詢 SQL。好在 MySQL 和 Oracle 的
ESCAPE
語法是是一樣的,可以統一。此外字符串連接函數CONCAT
也應該以 Oracle 為主,只能有兩個參數。 - Oracle 的字段長度,一個中文的長度是2,這點與 MySQL 不一樣。可變長度、允許輸入中文的字段,都需要自動擴大到 MySQL 的 2 倍長。
- Oracle 的 null 值插入或者更新時的異常問題,可以通過 MyBatisPlus 的全局配置
jdbc-type-for-null: 'null'
統一解決。 - Oracle 區分大小寫的,SQL 語法中注意小寫是否真的是小寫,如果是,需要加引號轉義。
- MySQL 的 text 或者 LongText 字段,對應
NCLOB
VSVARCHAR(4000)
,有些特殊字段需要超長字符的,有個四千的邊界,超過就需要用NCLOB
類型。
其他低級錯誤
有些低級錯誤,比如:
- yml 配置冒號后面要有空格,特殊字符用單引號。
- IDEA 將普通 Java 工程導出可執行 jar 的時候,MANTIFET 清單文件生成的目錄必須放在 src 下面,否則打包生成的文件執行時找不到主類。
- 迭代器遍歷的正確用法是
while(it.hasNext)
而非 if ,后者只會執行一次。再次印證了一句經驗:不要相信拷貝來的代碼,除非經過了你的測試。 - 精度丟失問題,一個簡單的計算指定周期的時間戳的代碼,未考慮精度問題而溢出:
long result = 0; switch (type){ case "year": result = time*365*24*60*60*1000; break; case "month": result = time*30*24*60*60*1000; break; case "day": result = time*24*60*60*1000; break; }
這個簡單的根據時間單位類型,計算間隔的時間戳的代碼, time
類型傳入了 int
,結果幾個純數值默認 int 相乘后,單位為 year
結果溢出為負數了。
這是一個計算密碼鎖定時間的功能,鎖定時間算出為負了,當密碼正確時自動判斷是否繼續鎖定時,當前時間 > (鎖定開始時間+鎖定時常)直接解鎖了。
這個錯誤雖然低級,但是卻測不出來,只有腦回路清奇的測試把密碼鎖定策略的鎖定周期設置為年時才會顯現。
高級問題
Web 項目安全掃描,https 支持的過程中,默認的 ssl 配置被掃到了不安全的密碼套件和密鑰長度過短的問題。Spring Boot 項目配置 SSL ,在目標服務器配置后 ciphers
密碼套件后,訪問不成功,總結一下這個過程。
相關的 SSL 配置:
ssl: enabled: false key-store: file:xxx.jks key-store-type: JKS key-alias: xxx key-store-password: xxx # 配置證書版本,默認是 TLS1.0 protocol: TLS # 設置SSL版本,默認是 TLS1.0 enabled-protocols: TLSv1.2 # 密鑰套件算法,剔除不安全的算法 ciphers: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
需要注意的是,ciphers 參數中的密碼算法對 JDK 版本有要求,較低的1.8 小版本是不支持的。
工具思維
有一臺服務器的 SFTP 服務配置連接時間很短,由于網絡問題,FTP 客戶端總是沒法在30秒內完成連接。但是碰到需要上傳文件的時候,怎么辦呢?
找別人上傳了兩次之后,總不能每次都找別人幫忙上傳吧。試了下 Java 的 FTP 上傳工具類,jsch 竟然能成功上傳。一個簡單的工具類,就成了縮減版的 FTP 工具了。
開發啟示錄
啟示一,協同開發過程中,如果你看到了確實是問題的異常,拋在開發溝通群里,不能指望真正負責這個模塊的人會主動解決這個問題。最好的方法是 @他 并明確告訴他有問題。否則,下次這個問題復現的時候,還是會再次面對的。
啟示二,再次反思,拷貝代碼要測試。
以上就是項目適 Oracle改造及SSL安全性配置問題匯總詳解的詳細內容,更多關于Oracle改造SSL安全適配的資料請關注其它相關文章!
