近年來在網(wǎng)絡經常會看到一些網(wǎng)站的泄密事件,導致大量的用戶資料泄露,究其原因,很大程度上就在于數(shù)據(jù)庫備份文件被盜取造成的。
在SQL Server 2012之前的版本中,在Backup備份語句中,可以定義備份集密碼。使用密碼可以防止別人使用SQL Server工具在未經授權的情況下,執(zhí)行數(shù)據(jù)庫還原操作。但是,這僅僅是給備份附加了一個密碼,并沒有對備份數(shù)據(jù)進行加密。TDE可以加密整個數(shù)據(jù)庫,當然也可以加密備份文件。不過單單使用TDE來加密備份文件,又顯得有些大材小用。
在SQL Server 2014中,如果使用SQL Server 2014的原生備份加密,則無需對整個數(shù)據(jù)庫進行加密,備份僅僅在被寫入磁盤之前加密。如果將原生備份加密功能和備份壓縮工相結合,可以先壓縮再加密,不僅可以保護備份文件安全而且可以減小備份文件體積,可謂一舉兩得。這里還以上述“Clientzl”數(shù)據(jù)庫為例,首先按照上述方法創(chuàng)建數(shù)據(jù)庫主密鑰,執(zhí)行“CREATE CERTIFICATE ClientbkCert WITH SUBJECT = 'Backup Encryption Certificate'”,“Go”語句,創(chuàng)建所需的證書。注意,必須在Matser數(shù)據(jù)庫下創(chuàng)建證書。
執(zhí) 行“B A C K U P CERTIFICATE ClientbkCert TO FILE = 'd:zhengshuClientzlCert.cer”,“Go”語句,將證書導出。執(zhí)行“BACKUP DATABASE C l i e n t z l T O D I S K='C:dataClientzl_Encrypted.bak' WITH COMPRESSION, ENCRYPTION(ALGORITHM = AES_256,SERVER CERTIFICATE =ClientbkCert)”語句,就可以將數(shù)據(jù)庫備份進行加密處理。
在還原時,可以執(zhí)行“USE master”,“RESTORE DATABASE Clientzl FROM DISK = 'C:dataClientzl_Encrypted.bak' WITH REPLACE”語句,就可以將其還原。如果在其他的SQL Server實例上進行還原,則必須按照上述方法將證書備份出來,然后在目標主機上執(zhí)行導入證書操作,之后才可以執(zhí)行數(shù)據(jù)庫還原操作。
實際對于使用SQL Server作為后臺數(shù)據(jù)的網(wǎng)站來說,如果網(wǎng)站代碼存在注入漏洞的話,黑客就會使用各種注入工具對其進行SQL注入攻擊,對于經驗豐富的黑客來說,甚至可以徒手進行注入攻擊。一旦讓其得手,對網(wǎng)站的安全就會造成極大的威脅。例如,黑客可以猜解到后臺數(shù)據(jù)庫管理員密碼。并冒充管理員登錄到網(wǎng)站后臺,上傳木馬并提升權限,對服務器進行各種攻擊?;蛘呃米⑷肼┒矗瑘?zhí)行各種危險的命令,打開遠程桌面服務,創(chuàng)建黑客賬戶,進而控制整個服務器。
SQL注入攻擊的原理很簡單,因為是網(wǎng)站程序沒有對用戶提交的數(shù)據(jù)的合法性進行準確判斷造成的。防范SQL注入攻擊的方法有很多,例如對用戶提交的數(shù)據(jù)進行嚴格的驗證和過濾,對可疑數(shù)據(jù)(包括特殊字符,敏感的SQL關鍵字等)進行替換,當對用戶輸入的內容進行過濾后,可以大大降低攻擊風險。使用存儲過程,利用參數(shù)來傳送用戶提交的數(shù)據(jù)并通過對參數(shù)的數(shù)據(jù)類型進行嚴格的定制,可以有效過濾各種惡意數(shù)據(jù),使其無法提交執(zhí)行。
為了提高安全性,還可以在客戶端進行輸入合法性檢查,限制其輸入長度,對應用程序使用的賬號進行嚴格的權限管理,例如不要將SA賬戶隨意交由用戶使用等。