資料庫是大多數應用系統的核心,因此,資料庫安全常是各種場合一再被拿出來探討的議題.但是您知道嗎?要為大部份資料庫安全問題可歸責於資料的擁有者或管理者,而且當管理者或架構設計者有採取適當的防護措施時這些問題都是可以避免或補救的.會造成資料丟失或洩露的人有兩大類:
1. 自己人,這包括:
甲、在操作系統上幹活的系統工程師:
和任何跑在作業系統上的應用程式一樣,MySQL資料庫管理系統佔用伺服器的記憶體空間,資料也有會長久存於磁碟中.系統工程師可能對資料庫幹的蠢事包括:
i.
誤殺mysqld程序.
ii.
誤刪某些資料庫檔案,如my.cnf之類的設定檔,或表空間檔,或者binlog之類的日誌檔,甚至是整個資料目錄.
l
由於系統工程師會擁有作業系統的root帳戶,這類的誤刪是沒法完全避免的,要減少這種狀態發生的機會,可以在目錄層的權限不給privilege mask 750(擁有者有全部的權限,同一組的用戶可看可執行但不能寫,其他作業系統的用戶什麼都不能做)以上的權限,以防制這類的失誤.
l
另外, MySQL的高可用架構(例如group replication或半同步複製等)在多台伺服器上執行由多個資料庫所構成的不會掉資料的同步.因此,當有人對一個資料庫做些蠢事把整個資料庫都殺了時,還有其他的資料庫存有一份一樣的資料,可以將它由別台伺服器全部抄回來.
l
當然,資料庫的備份是救回資料的最後手段,不過,想要不掉資料的把資料庫整個都救回來,除了完整的備份外,binlog一定要全整的保留下來.所以,如果資料庫伺服器有多個磁碟機,建議將binlog存放於和MySQL的資料目錄不同的磁碟機上,以免刪除資料目錄時binlog會一併刪除.
乙、擁有root或資料庫管理權限的資料庫管理師或某些schema管理權限的資料操作者,一般所指的DBA就是這類人,廣義來講,也包括某些應用程式開發者,他們能登入資料庫管理系統,對存資料的表或整個資料庫層級的物(如帳號權限等)件做各種操作,他們可能對資料庫造成的問題有:
l
刪庫跑路是DBA所可能做的最蠢的事,別以為老手不會幹這種事,越是老船長越可能陰溝裏翻船,這包括刪掉整個schema、整個表、或動到是某些不該刪或改的資料.比較好的做法是事先防範.MySQL企業版的用戶可以用資料庫防火牆,在SQL命令執行前檢查SQL命令,檔下由未經允許的前端所下的刪除整個表或schema,或是沒有where條件的delete及update之類的SQL命令全都由防火牆檔下(在最佳實務中這類的命令不可以隨意下,必需在特定機器、特定時間、以一個事先包裝好的程式去執行).如果要做到更精細的檢查,可在使用者介面之上加一個審核機制,在SQL命令送到資料庫前先檢查SQL的內容,不合規定的SQL命令都被審核系統擋下或發出警告.今年COSCUP的開源資料庫系列的第四場(第一天下午一點開始)演講中周彥偉介紹他所開發的Inception開源審計軟體就是一個具體的實踐,有興趣進一步了解的朋友請把握這個機會到開源資料庫系列的研討會和MySQL的技術大牛們聊聊.
2. 居心不良的駭客:
這是大部份安全防護系統想要防備的對象,這些人入侵的手段包括網路攻擊、密碼竊取、以暴力試密碼、掛在網路上竊取傳輸的資料、入侵作業系統將整個目錄或表空間檔案抄走、或者自備份出來的資料中讀取資料等等手法.
新版MySQL大幅加強了安控能力,再配MySQL企業版的各種安控插件,例如加密插件、透明表空間加密插件、稽核插件、和可利用LDAP之類登入機制的安控插件等,使我們有機會打造出一套幾乎滴水不漏的資訊系統.當然,再強的堡壘經長時間的攻擊總有漏出破綻的時候,此時MySQL企業監控就能發揮預防重於治療的效果,隨時監看系統,找出在管理及配置上可能有安全漏洞的地方,在這些漏洞還沒曝光前,讓我們能及時將漏洞堵住.另外,Oracle的support服務會在MySQL軟體上的漏洞被發現時及時推出修正版解決這些問題,MySQL企業版的用戶可以將企業監控和Oracle support連線,在安全漏洞發佈的第一時間收到通知,並以一鍵式更新的方式更新資料庫版本,及時將資料庫軟體的安全漏洞補上.
有興趣了解MySQL安控機制的朋友,請把握我在COSCUP第二天下午2:40在IB201的”如何善用MySQL打造固若金湯的系統”研討會.