mysql 加密 tde_[SQL Server] 利用透明数据加密(TDE)对整个数据库加密
using TDE encrypt SQL Database
前言
最近客戶有需求想避免數據庫(.mdf、.ldf)被偷走時,數據外泄流出
剛好SQL Server的TDE加密功能滿符合需求。
TDE透明數據加密會對數據庫整個加密,防范目標:有人已偷走數據庫,沒有憑證&私𬬭的話,在附加數據庫或還原備份數據庫時就會報錯,而沒辦法看到數據庫里的數據。
一般程序存取數據,或用SSMS進入SQL Server里查詢數據則是正常使用,無須額外設定
不過得留意Standard版的數據庫不支持此功能
支持TDE加密功能的數據庫為SQL Server 2008以上的Developer, Enterprise,Datacenter版。
※2018.3.6追記:發現IBM建議若是SQL Server Standard版的話,可使用Windows內建的EFS加密文件系統來加密.mdf、.bak
在 SQL Server 數據庫上啟用透通數據加密
不過EFS加密防范目標和TDE防范目標有點不同
TDE是假設數據庫已被偷走,避免被存取數據;而EFS是阻止Windows登入使用者偷走數據庫。
采用EFS加密過的文件,想復制偷走的話,有以下途徑:
1.取得加密文件使用者的登入賬密登入Windows,用該身份拿走文件。
2.使用其他身份使用者登入Windows,但要安裝 加密文件使用者的憑證。
3.使用其他身份使用者登入Windows,再用救援軟件還原文件(嗯?還有這招)
如何存參考EFS加密的文件?
針對數據庫如何實踐EFS,已有其它網友撰寫文章:Windows 2012 R2 實踐 EFS 文件系統加密
==============================================================================================================
以下介紹如何對一個數據庫做TDE加密,并且移機到另一臺機器上時,如何把數據庫附加回去。
實踐
開啟數據庫加密功能實踐流程,請見微軟文檔說明的四大步驟(缺少一個備份憑證&私𬬭步驟XD)
我已經有名為“ContosoUniversity”數據庫
本文以它當范例
Step 1:-- 在master DB 建立 master key
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1234'; --密碼隨便給,不影響本文作業
--查看建立的master key
select * from sys.symmetric_keys
Where name='##MS_DatabaseMasterKey##'
如果SQL Server中已經有前人建好的Master Key,就繼續沿用,因為再重復建立Master Key會報錯(或把前人的Master Key Drop掉?)
Step 2:--在master DB建立SQL Server憑證
USE master;
GO
CREATE CERTIFICATE MySQLServerCert
WITH SUBJECT = '用來展示TDE功能的憑證'
--查看建立的憑證
Select * from sys.certificates
Where name='MySQLServerCert'
如果憑證名稱和前人建立的憑證名稱重復的話,就另外取個名字吧
Step 3:--在master DB備份SQL Server憑證與私𬬭
USE master;
GO
BACKUP CERTIFICATE MySQLServerCert --要備份的憑證
TO FILE = 'MySQLServerCert.cert' --給一個文件名
WITH PRIVATE KEY --建立私𬬭
(
FILE = 'MySQLPrivateKeyFile.pk', --默認備份位置為(C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATA)
--根據SQL Server版本不同存放的憑證&私𬬭 位置會不一樣
ENCRYPTION BY PASSWORD = 'demoPWD' --這密碼很重要!移機時用得到
);
GO
上面命令執行完畢會產生兩個文件,請妥善保管,數據庫要附加到另一臺機器上時派得上用場。
Step 4:-- 切換到想加密的數據庫,本文為“ContosoUniversity”
USE ContosoUniversity;
GO
--在自己的數據庫上建立 ENCRYPTION KEY
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --加密算法
ENCRYPTION BY SERVER CERTIFICATE MySQLServerCert; --使用哪個憑證
GO
Step 5: 最后一個步驟,啟用加密功能USE ContosoUniversity;
GO
--利用TDE對整個數據庫加密
ALTER DATABASE ContosoUniversity
SET ENCRYPTION ON;
GO
接著示范,把數據庫(.mdf、.ldf)卸離,移到另一臺機器上執行附加數據庫動作(記得憑證、私𬬭兩個文件也要跟著搬移)
在另一臺機器,文件都放在以下位置
接著另一臺機器也要導入剛剛備份的憑證&金鑰,否則直接附加數據庫會報錯↓
另一臺機器想要附加TDE加密過的數據庫前,得先導入相關憑證&金鑰,SQL語法如下
Step1:-- 在另一臺 SQL Server 建立 master key .
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'masterKey2PWD'; --密碼故意跟之前的master key不一樣,沒關系
Go
Step 2:USE master;
GO
-- 以下是重點!
-- 利用之前備份的SQL Server憑證和私𬬭再次建立SQL Server certificate
CREATE CERTIFICATE SQLServerCertAnother --這臺SQL Server的憑證名字故意取不一樣,沒關系
FROM FILE = 'C:Program FilesMicrosoft SQL ServerMSSQL12.SQLEXPRESS2014MSSQLDATAMySQLServerCert.cert' --剛剛備份的憑證
WITH PRIVATE KEY
(
FILE = 'C:Program FilesMicrosoft SQL ServerMSSQL12.SQLEXPRESS2014MSSQLDATAMySQLPrivateKeyFile.pk', --剛剛備份的私𬬭
DECRYPTION BY PASSWORD = 'demoPWD' --密碼必須和備份時指定的密碼一樣
);
GO
Step 3:
如此才能成功附加數據庫(.mdf檔),這很簡單我懶得截圖了XD
結語
如果數據庫想關閉TDE加密功能的話,可以參考老外MSDN討論:
The certificate 'instance' cannot be dropped because it is bound to one or more database encryption key.
語法如下--關閉TDE加密
Use ContosoUniversity
Go
--把數據庫加密功能關閉
ALTER DATABASE ContosoUniversity SET ENCRYPTION OFF
--移除數據庫的ENCRYPTION KEY
DROP DATABASE ENCRYPTION KEY
Use master
Go
/* --查詢哪些數據庫使用SQL Server加密憑證
SELECT db_name(database_id), encryption_state, percent_complete, key_algorithm, key_length
FROM sys.dm_database_encryption_keys
WHERE db_name(database_id) not in('tempdb')
*/
--移除憑證
DROP CERTIFICATE MySQLServerCert
--移除Master Key
DROP MASTER KEY
總結
以上是生活随笔為你收集整理的mysql 加密 tde_[SQL Server] 利用透明数据加密(TDE)对整个数据库加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSI框架
- 下一篇: 瑞芯微RV1126/1109开发流程之驱