林秀麗

摘 要:應用數據庫的領域越來越廣泛,數據的保密機制不可忽視,數據要安全就必須采取相關措施,通常數據加密是數據安全的最后一道關卡。文章主要從教學的角度闡述數據加密原理、數據加密解密方法,避免數據被泄露、被修改。
關鍵詞:數據庫;加密;解密
數據的安全措施在現實應用中有很多,如:隔離數據庫、角色授權、審核、密碼等,本文講解SQL Server應用中的數據加密[1]。
1 數據加密原理
數據加密是保護數據的一種有效機制。目的是將明文即原始數據轉變成不可直接讀的密文。原理是:明文同密鑰的值捆綁一起經過數學公式處理完成其數據加密,變成密文不可讀。接收方若要想讀取數據,必須用正確的解密密鑰和反向的數學過程完成解密。
加密密鑰的長短決定了加、解密運算的復雜性,同時也影響計算機處理時間的長短,以及存儲空間與成本。
最主要的加密類型有兩種:(1)對稱加密。特點是使用相同的密鑰進行文件加密和解密,即對稱密碼編碼技術。加解密過程,通信雙方都用同一密鑰即公共密鑰加解密,如:甲、乙通信,甲將自己明文信息用公鑰加密成密文,乙收到密文后用公鑰解密成明文。常用的加密算法有RC2,3DES,IDEA,AES。密鑰短,破譯難,使用起來便捷。(2)非對稱加密。特點是加解密雙方各自有一個密鑰對,分別稱為私鑰和公鑰。加解密過程,如甲、乙通信,甲將自己的私鑰保密公鑰告訴乙,乙也同樣保密自己的私鑰公鑰告訴甲,甲向乙發送信息時用乙的公鑰加密,乙收到密文后用自己的私鑰解密變成明文。乙向甲發送信息采用相同的方法加解密數據。常用的加密算法有RSA和DSA。非對稱加密同對稱加密相比,算法強度要復雜得多,因加密與解密密鑰不同,一致認為非對稱加密比對稱加密更安全,但加密速度要慢很多。所以對大量數據進行加、解密時一般使用對稱加密。
SQL Server支持3種類型加密,且已內置。對稱加密、非對稱加密以及另一種形式的非對稱加密證書加密。
SQL Server的加密結構是分層進行的,自上而下分別為:WINDOWS級別和SQL Server級別使用服務主密鑰對下級的數據庫進行加密;數據庫級別使用數據庫主密鑰對數據進行加密。進行加密時,都是上級層使用對稱密鑰(見圖1)、非對稱密鑰(見圖2)、證書的組合對下級層加密[2]。
圖2 非對稱加密
2 數據加解密方法
數據庫的實際應用中常有一些敏感數據,必須要將其加密,避免泄露,如:銀行卡卡號、用戶的各種密碼、職工的工資甚至一些機密文件等。保存加密后的數據,即使被盜了數據,對方也無法查看敏感數據,因沒有解密的密鑰[3-4]。
以下通過一個案例講述數據加、解密。本案例的數據庫為測試數據庫SALES,其中EMPLOYEE職工表中有職工的工資WAGES要保密,通過對稱加密算法對WAGES列數據進行加密,步驟如下。
2.1 服務主密鑰
服務主密鑰是第一次用它來加密其他密鑰時自動生成,此密鑰是加密保護本地計算機密鑰而被使用的。主服務密鑰的打開權限只有創建它的操作系統賬戶或有權限訪問服務賬戶的用戶才可以。
2.2 數據庫主密鑰的創建
數據庫主密鑰用于數據庫級別加密。此密鑰不能自動生成,由管理員創建,且主密鑰對每個數據庫只建一次。代碼如下:
use SALES
go
create master key
ENCRYPTION BY PASSWORD=' enter @your@ secret @code.';
2.3 證書APCERT的創建
證書的頒發和簽名由證書機構CA完成。證書是驗證身份的一種方式,常含有以下信息:證書序列號,是唯一的;證書主題,即標識符信息;證書有效期;證書發行者簽名等。
USE SALES ;
go
CREATE CERTIFICATE APCRT
WITH SUBJECT = 'ENTER APCRT PASSWORD!',
EXPIRY_DATE = '2015/1/3';
go
2.4 對稱密鑰PKEY的創建
對稱密鑰是用來加密保密數據。使用才創建的證書APCERT,AES 256加密算法對此密鑰進行加密。
use SALES
go
create symmetric key PKEY
with algorithm=aes_256
encryption by certificate APCRT;
2.5 打開對稱密鑰
只有對稱密鑰打開才能綁定到會話進行數據加、解密。
use SALES
go
open symmetric key PKEY
decryption by certificate APCRT
2.6 加密成密文
用于數據加密的函數ENCRYPTBYKEY(),用于數據解密的函數DECRYPTBYKEY()。兩函數使用的都是對稱密鑰。
—用加密的函數ENCRYPTBYKEY()加密成密文
use SALES
go
create table employee
(Employee_ID char(4)NOT NULL primary key,
password varbinary(500) not null)
go
select * from employeeendprint
go
insert into employee values ('E1',ENCRYPTBYKEY(KEY_GUID ('PKEY'),'p@ssword1'))
insert into employee values ('E2',ENCRYPTBYKEY(KEY_GUID ('PKEY'),'pp'))
insert into employee values ('E3',ENCRYPTBYKEY(KEY_GUID ('PKEY'),'aaa'))
go
select * from employee
go
—用解密的函數DECRYPTBYKEY()解密出明文
SELECT Employee_ID ,password from employee
select Employee_ID ,CONVERT (varchar(50),decryptbykey(password)) from employee
go
2.7 關閉對稱密鑰
注意:加密的函數ENCRYPTBYKEY()同解密的函數DECRYPTBYKEY()只有在密鑰打開的情況下才有效。
CLOSE SYMMETRIC KEY PKEY;
GO
3 結語
網絡技術、數據庫技術都在不斷發展,數據庫安全是一個永久性問題,入侵技術不斷提高,數據庫安全技術的提升勢在必行。針對數據庫安全技術的新問題、新情況,加強研究數據庫安全必須首先從一線的課堂教學深入加強,在思想上對安全技術重視起來,讓安全技術穩步發展。
[參考文獻]
[1]王永樂,徐書欣.SQL Server2008數據庫管理及應用[M].北京:清華大學出版社,2011.
[2]李愛武.SQL Server2008數據庫技術內幕[M].北京:中國鐵道出版社,2012.
[3]俞榕剛.SQL Server 2012實施與管理實戰指南[M].北京:電子工業出版社,2013.
[4]徐慧.數據庫技術與應用[M].北京:北京理工大學出版社,2010.endprint