程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2008 安全性(透明數據加密(TDE)

SQL Server 2008 安全性(透明數據加密(TDE)

編輯:關於SqlServer
在SQL Server 2005的安全性來說,做的不夠好,比如EKM這種可擴展的外部密鑰管理就不支持,包括對數據庫文件本身的加密。                 SQL Server 2008中增加了透明數據加密TDE,TDE使用DEK 數據庫加密密鑰對數據文件進行加密,包括IO操作,加入內存等都是存在加密和解密操作的。DEK本身是受master數據庫下的證書保護的,當然也支持EKM模塊包含。我們對數據文件可以使用標准的DES 和AES加密。                 在某些特定場合,比如我們的服務器發生盜竊行為的時候,一些關鍵性數據庫不被惡意附加挖掘其中的價值數據,除了使用硬件級別的文件格式加密。SQL Server 用TDE來保護文件安全。                 我主要通過T-SQL 腳本的形式描述 整個加密以及分離、附加數據庫的流程。        /* Title:TDE加密
Author:浪客
Environment:Windows Server 2008 Enterprise + SQL Server 2008 Enterprise
Description:請在非生產環境下測試
*/

USE [master];
GO

--查看master數據庫是否被加密
SELECT name,is_master_key_encrypted_by_server FROM sys.databases;

--創建master數據庫下的主數據庫密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWord = N'浪客!@#$%^&*()0A';

--查看master數據庫下的密鑰信息
SELECT * FROM sys.symmetric_keys;

--創建證書用來保護 數據庫加密密鑰 (DEK)
CREATE CERTIFICATE master_server_cert WITH SUBJECT = N'Master Protect DEK Certificate';

IF DB_ID('db_encryption_test') IS NOT NULL
    DROP DATABASE db_encryption_test

--創建測試數據庫
CREATE DATABASE  db_encryption_test;
GO

USE db_encryption_test;

--創建由master_server_cert保護的DEK 數據庫加密密鑰 (對稱密鑰)
CREATE DATABASE ENCRYPTION KEY 
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE master_server_cert;
GO

--執行上語句以後出現:
/*
Warning: The certificate used for encrypting the database encryption key has not been backed up. You should immediately back up the certificate and the private key associated with the certificate. If the certificate ever becomes unavailable or if you must restore or attach the database on another server, you must have backups of both the certificate and the private key or you will not be able to open the database.
*/
--提示你,立刻備份證書;這裡備份證書,不比制定加密私鑰的 對稱密鑰了.因為他的密鑰是通過master數據庫的主數據庫密鑰加密了.
USE master;
BACKUP CERTIFICATE master_server_cert TO FILE = 'D:\MSSQL\Certificate\master_server_cert.cer' 
    WITH PRIVATE KEY ( 
    FILE = 'D:\MSSQL\Certificate\master_server_cert.pvk' , 
    ENCRYPTION BY PASSWord = '浪客!@#$%^&*()0A' );

--相應的,我們也備份一下數據庫主密鑰(master)
USE master;
--如果沒有啟用主密鑰的自動解密功能
--OPEN MASTER KEY DECRYPTION BY PASSWord = '浪客!@#$%^&*()0A';
BACKUP MASTER KEY TO FILE = 'D:\MSSQL\MasterKey\master.cer' 
    ENCRYPTION BY PASSWord = '浪客!@#$%^&*()0A';
GO 

--生產環境下,設置成單用戶在運行加密
ALTER DATABASE db_encryption_test SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

--備份成功以後,開啟TDE 加密
ALTER DATABASE db_encryption_test SET ENCRYPTION ON;
GO

--設置多用戶訪問
ALTER DATABASE db_encryption_test SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO

--查看db_encryption_test數據庫是否被加密  encryption_state:3 TDE加密了
SELECT DB_NAME(database_id),encryption_state FROM sys.dm_database_encryption_keys;
/*
發現tempdb也被加密了。MSDN解釋是:如果實例中有一個數據庫啟用了TDE加密,那麼tempdb也被加密
*/

--接下來,找另外一台機器或者實例來測試,如果數據文件被盜走了,防止附加的測試.
USE master;
EXEC sp_detach_db N'db_encryption_test';
GO

--將文件QQ發到了另外的機器,我同事 CL .


USE master;
--我先在他機器還原了MASTER KEY (他原機器master庫無master key)
RESTORE MASTER KEY 
    FROM FILE = 'C:\Users\Administrator\Desktop\master.cer' 
    DECRYPTION BY PASSWord = '浪客!@#$%^&*()0A' 
    ENCRYPTION BY PASSWord = '浪客!@#$%^&*()0A';
GO

--如果沒有自動加密
OPEN MASTER KEY DECRYPTION BY PASSWord=N'浪客!@#$%^&*()0A';
--創建證書
CREATE CERTIFICATE master_server_cert 
    FROM FILE = 'C:\Users\Administrator\Desktop\master_server_cert.cer' 
    WITH PRIVATE KEY (FILE = 'C:\Users\Administrator\Desktop\master_server_cert.pvk', 
    DECRYPTION BY PASSWord = '浪客!@#$%^&*()0A');
GO 
--附加數據庫
CREATE DATABASE db_encryption_test 
ON PRIMARY 
(
    FILENAME=N'C:\Users\Administrator\Desktop\db_encryption_test.mdf'
)
LOG ON 
(
    FILENAME=N'C:\Users\Administrator\Desktop\db_encryption_test_log.ldf'
)
FOR  ATTACH ;
GO

--測試成功,GG,GL

--關閉數據庫聯接
CLOSE MASTER KEY
                    通常我們使用某種新特性的時候,還會關注他對SQL Server其他組件的影響,包括復制服務以及數據庫鏡像以及日志傳送。復制是通過標志事務日志傳送標識日志的方式同步數據,當時通過bcp生成的快照文件,不會采用TDE加密數據,這種存在傳輸信道的 我們通常使用OS的IpSec,SSL,TSL方式來加密連接,這種在以後的文章會向大家提到。而數據鏡像和日志通過傳送日志的方式,所以傳輸過程中的日志文件是加密的。
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved