為了保護數據的安全,僅僅依靠權限控制是不夠的,通過對數據進行加密,可以有效保護SQL Servr數據庫的安全。在SQL Server中,加密是分層級的,根層級的加密保護其下子層級的加密。每一個SQL Server實例都擁有服務主密鑰,這是整個實例的根密鑰。
數據庫主密鑰工作在數據庫級別,每一個數據庫只能存在一個主密鑰,可以使用T-SQL語句來創建數據庫主密鑰,例如執行“CREATE MASTER KEY ENCRYPTION BY PASSWORD ='key123456'”語句,來創建數據庫主密鑰,這里的密碼為“key123456”。當創建完畢后,可以使用其創建數據庫級別的證書和和非對稱密鑰。通過證書和非對稱密碼,可以保護對稱密鑰。使用證書、非對稱密鑰以及對稱密鑰,可以對數據進行保護。例如,可以對數據表中特定的列進行加密。
例 如, 執 行“CREATE CERTIFICATE Certauser with SUBJECT = 'Test zhengshu'”語句,可以創建名為“Certauser”的證書,執 行“CREATE ASYMMETRIC KEY CeshiAsymmetric WITH ALGORITHM = RSA_2048 ENCRYPTION BY PASSWORD ='password'”語句,可以創建 名 為“CeshiAsymmetric”的非對稱密鑰。執行“CREATE SYMMETRIC KEY CeshiSymme tric WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD= 'password'” 語 句,可以創建名為“CeshiSymme tric”的對稱密碼。在目標數據庫中打開“安全性”節點下打開“證書”,“非對稱密鑰”,“對稱密鑰”項,可以看到以上創建的證書,非對稱密鑰以及對稱密鑰。
執行語句“C R E A T E S Y M M E T R I C KEY SymmetricByCert WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE Certauser”,可以根據 Cert Test證書來創建對稱密鑰。在實際使用時,需要配合對應的加解密函數進行操作。例如對某數據表中的列進行加密時,首先使用“CONVERT(varbinary(500),kahao)”函數,對特定的列(這里為“kahao”)進行類型轉換,將其轉換成Varbinary類型,在程序中的合適位置 執 行“OPEN SYMMETRIC KEY SymmetricByCert DECRYPTION BY CERTIFICATE Certauser” 語 句,打 開被證書加密的對稱密鑰。 執 行“kahao_encrypt= EncryptByKey(KEY_GUID('SymmetricByCert'),kahao),”之類的語句,對“kahao”列內容進行加密。
對于加密的數據,按照常規方式查看時,要么無法顯示,要么顯示雜亂。在解密時,可以執行“convert(nvarchar(25),DecryptByKey(kahao_encrypt))”之類的語句,對該字段的內容進行解密。……