SQL Server數(shù)據(jù)加密的層次結(jié)構(gòu)
SQL Server支持?jǐn)?shù)據(jù)庫(kù)級(jí)的加密(TDE)和列級(jí)的數(shù)據(jù)加密。數(shù)據(jù)庫(kù)級(jí)的加密是透明的,程序無需額外操作;而列級(jí)加密則需要程序進(jìn)行一些額外操作。SQL Server的加密層次結(jié)構(gòu)分為不同層級(jí),本文將
SQL Server支持?jǐn)?shù)據(jù)庫(kù)級(jí)的加密(TDE)和列級(jí)的數(shù)據(jù)加密。數(shù)據(jù)庫(kù)級(jí)的加密是透明的,程序無需額外操作;而列級(jí)加密則需要程序進(jìn)行一些額外操作。SQL Server的加密層次結(jié)構(gòu)分為不同層級(jí),本文將介紹使用四個(gè)層次來加密/解密數(shù)據(jù)的過程。
測(cè)試環(huán)境準(zhǔn)備
在測(cè)試環(huán)境中,我們將使用SQL Server 2012 R2,并創(chuàng)建一個(gè)名為TBLUser的數(shù)據(jù)表,包含Name和Password兩個(gè)字段。下面是創(chuàng)建該表的T-SQL代碼:
```sql
CREATE TABLE TBLUser (
Name nvarchar(30),
Password varbinary(1000)
);
```
創(chuàng)建數(shù)據(jù)庫(kù)主密鑰
數(shù)據(jù)庫(kù)主密鑰(Database Master Key)位于服務(wù)主密鑰之下,用于為創(chuàng)建數(shù)據(jù)庫(kù)級(jí)證書或非對(duì)稱密鑰提供加密。每個(gè)數(shù)據(jù)庫(kù)只能有一個(gè)數(shù)據(jù)庫(kù)主密鑰,通過以下T-SQL語(yǔ)句創(chuàng)建:
```sql
CREATE MASTER KEY ENCRYPTION BY PASSWORD '';
```
創(chuàng)建證書
我們接著創(chuàng)建一個(gè)用于加密對(duì)稱密鑰的證書,具體代碼如下:
```sql
CREATE CERTIFICATE TestCert WITH SUBJECT 'Test Certificate';
```
創(chuàng)建對(duì)稱密鑰
根據(jù)SQL Server的加密層次結(jié)構(gòu),對(duì)稱密鑰可以通過密碼、其它對(duì)稱密鑰、非對(duì)稱密鑰或證書創(chuàng)建。這里我們以證書創(chuàng)建一個(gè)名為TestSymmetric的對(duì)稱密鑰,代碼如下:
```sql
CREATE SYMMETRIC KEY TestSymmetric WITH ALGORITHM AES_256 ENCRYPTION BY CERTIFICATE TestCert;
```
加密數(shù)據(jù)
首先打開對(duì)稱密鑰,然后使用ENCRYPTBYKEY函數(shù)加密數(shù)據(jù),并在完成后關(guān)閉對(duì)稱密鑰。具體代碼如下:
```sql
OPEN SYMMETRIC KEY TestSymmetric DECRYPTION BY CERTIFICATE TestCert;
INSERT INTO TBLUser VALUES ('張三', ENCRYPTBYKEY(Key_GUID(N'TestSymmetric'), '123456'));
CLOSE SYMMETRIC KEY TestSymmetric;
```
查看加密后數(shù)據(jù)
通過執(zhí)行以下SQL查詢,我們可以看到密碼字段內(nèi)容已被加密成16進(jìn)制字符,無法直接閱讀:
```sql
SELECT * FROM TBLUser;
```
解密數(shù)據(jù)
要解密數(shù)據(jù),同樣需要先打開對(duì)稱密鑰,然后使用DecryptByKey函數(shù)解密數(shù)據(jù),并最后關(guān)閉對(duì)稱密鑰。具體代碼如下:
```sql
OPEN SYMMETRIC KEY TestSymmetric DECRYPTION BY CERTIFICATE TestCert;
SELECT Name, CAST(DecryptByKey(password) as varchar(100)) Password FROM TBLUser;
CLOSE SYMMETRIC KEY TestSymmetric;
```
以上是使用SQL Server的加密層次結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行加密和解密的過程。通過合理管理密鑰和證書,可以有效保護(hù)敏感數(shù)據(jù)的安全性。