SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

栏目: 数据库 · 发布时间: 5年前

内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DBA_Huangzj/article/details/87188750

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DBA_Huangzj/article/details/87188750

本人新书上市,请多多关照: 《SQL Server On Linux运维实战 2017版从入门到精通》

SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

Transparent Data Encryption,TDE,也叫透明数据加密,用于在数据和事务写入磁盘时同步加密,简单来说就是如果没有拿到解密密钥,那么即使得到了数据库或者数据库备份及sa密码,你也用不了数据。这个功能从SQL Server 2008 已经引入,不能算新功能,但是说到安全性,还是有必要提一下,因为这个功能从出现开始,一直被强化,可见微软对其的重视。

TDE简介

开启TDE之后,访问物理数据库文件需要提供证书,在数据写入磁盘时,会同步加密所有数据,在查询数据时再进行解密。TED以8K(即一页)为单位进行加解密。

需要注意的一点是,当实例开启了TDE之后,TempDB自动被加密,即使用户数据库一点都没用到TempDB,因为实际上几乎没有多少正式数据库是不用TempDB(有些大量数据 排序 、Hash等会自动使用TempDB),哪怕数秒之后就结束,也有可能带来安全风险,所以一并加密。但是我们知道加解密必然需要CPU开销,所以不管是用户库还是TempDB的这部分数据,都必将受到性能影响。

TDE的设置不算复杂,需要一个数据库主密钥(database master key)、一个master库的证书及足够的权限。

TDE限制

了解限制比了解功能更加重要,因为限制只要一个,就足够让你整个过程失败。

  1. 不能加密数据库的子集:必须全库加密
  2. TDE更加重视文件的保护而不是对数据库内数据的保护。
  3. TDE最大的缺点是对FileStream文件不进行加密。
  4. 对SQL Server版本有所要求。只有企业版和开发版才有的功能。

TDE性能

如上所述,加解密本身就是资源消耗操作。由于TDE不加密在 SQL 缓冲区中的数据(只对写入文件中的数据进行加密),所以大部分时候,在缓冲区的数据不会受到TDE的影响,对性能的影响微乎其微,但是在flush到磁盘和从磁盘读取到内存的过程中,就确实会存在性能问题。

TDE演示

下面快速演示一下TDE操作,由于这个技术已经出现了比较久,所以网上资料还是挺多。没有必要在这里花太多时间。

TDE过程分为4步:

  1. 在Master库中创建主密钥(master key)。
  2. 创建或使用现有证书保护上面的主密钥。
  3. 创建数据库加密密钥,使用上面的证书进行保护。
  4. 启用数据库TDE。

环境准备

下面创建一个TDEDemo数据库进行演示:

--创建演示库TDEDemo
use master
go
create database TDEDemo
GO

创建一个目录用于存放证书,然后进行授权

# mkdir /var/opt/mssql/certs

创建目录后如下图

SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

检查当前权限,因为使用root来操作,所以默认初始权限就是root。

SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

修改权限,使mssql账号及其组能操作。

chown -R mssql:mssql /var/opt/mssql/certs

检查权限是否修改成功

SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

master库中创建主密钥

USE master;
GO

-- 在Master库中创建主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '!drJP9QXC&Vi%cs';
GO

--创建证书
CREATE CERTIFICATE TDEDemoCert WITH SUBJECT = 'Certificate to implement TDE on TDEDemo';
GO

--重要! 备份证书,把证书备份到刚创建的目录下
BACKUP CERTIFICATE TDEDemoCert TO FILE = '/var/opt/mssql/certs/TDEDemoCert'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/certs/TDECertPrivateKey' , 
    ENCRYPTION BY PASSWORD = 'RISiS8AUl%CByEk6' );--使用其他强密码
GO

检查是否创建成功

SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

创建数据库加密密钥并开启TDE

--检查加密情况
SELECT DB_NAME(database_id) AS DatabaseName,
    key_algorithm AS [Algorithm],
    key_length AS KeyLength,
    CASE encryption_state
        WHEN 0 THEN 'No database encryption key present, no encryption'
        WHEN 1 THEN 'Unencrypted'
        WHEN 2 THEN 'Encryption in progress'
        WHEN 3 THEN 'Encrypted'
        WHEN 4 THEN 'Key change in progress'
        WHEN 5 THEN 'Decryption in progress'
    END AS EncryptionStateDesc,
    percent_complete AS PercentComplete
FROM sys.dm_database_encryption_keys;
GO


USE TDEDemo;
GO

-- 创建数据库加密密钥,并使用证书进行加密
CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128
    ENCRYPTION BY SERVER CERTIFICATE TDEDemoCert;
GO


-- 开启数据库TDE功能
ALTER DATABASE TDEDemo SET ENCRYPTION ON;
GO
--再次检查
SELECT DB_NAME(database_id) AS DatabaseName,
    key_algorithm AS [Algorithm],
    key_length AS KeyLength,
    CASE encryption_state
        WHEN 0 THEN 'No database encryption key present, no encryption'
        WHEN 1 THEN 'Unencrypted'
        WHEN 2 THEN 'Encryption in progress'
        WHEN 3 THEN 'Encrypted'
        WHEN 4 THEN 'Key change in progress'
        WHEN 5 THEN 'Decryption in progress'
    END AS EncryptionStateDesc,
    percent_complete AS PercentComplete
FROM sys.dm_database_encryption_keys;
GO

结果如下,TDEDemo和tempdb已经开启了加密

SQL Server On Linux(12)—— SQL Server On Linux安全性(5)———透明数据加密(TDE)

测试TDE

接下来我们来测试一下效果,首先把证书“剪切”到别的地方,目的是做证书备份。

mv /var/opt/mssql/certs/* /tmp

剪切走证书之后,对数据库进行备份

BACKUP DATABASE [TDEDemo] TO  DISK = N'/var/opt/mssql/data/TDEDemo.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'TDEDemo-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

删除数据库,然后把证书也删了,模拟证书被意外删除

USE master
GO
DROP DATABASE TDEDemo;
GO

DROP CERTIFICATE TDEDemoCert; 
GO

还原数据库

RESTORE DATABASE [TDEDemo] FILE = N'TDEDemo' FROM  DISK = N'/var/opt/mssql/data/TDEDemo.bak' 
WITH  FILE = 1,  MOVE N'TDEDemo' TO N'/data/TDEDemo.mdf',  MOVE N'TDEDemo_log' TO N'/data/TDEDemo_0.ldf',  NOUNLOAD,  STATS = 10
GO

还原过程会出现以下报错,因为它找不到证书。

消息 33111,级别 16,状态 3,第 1 行
Cannot find server certificate with thumbprint ‘0x15496153CE71AFAA5181739F73F2FBC8BA231EEA’.
消息 3013,级别 16,状态 1,第 1 行
RESTORE DATABASE is terminating abnormally.

前面的步骤也可以用来模拟在服务器上获取了备份,不管是正规还是违规,然后在别的服务器进行还原的过程,那么要还原成功,我们需要获取证书和加密密钥。假设已经把这两个文件一并拿回来了。那么下面就要重新创建证书,然后就可以还原。

CREATE CERTIFICATE TDEDemoCert
    FROM FILE = '/tmp/TDEDemoCert'
    WITH PRIVATE KEY ( FILE = '/tmp/TDECertPrivateKey', 
    DECRYPTION BY PASSWORD = 'RISiS8AUl%CByEk6')

RESTORE DATABASE [TDEDemo] FILE = N'TDEDemo' FROM  DISK = N'/var/opt/mssql/data/TDEDemo.bak' 
WITH  FILE = 1,  MOVE N'TDEDemo' TO N'/data/TDEDemo.mdf',  MOVE N'TDEDemo_log' TO N'/data/TDEDemo_0.ldf',  NOUNLOAD,  STATS = 10
GO

TDE的目标是保护文件的安全,其他方面的安全需要其他的功能来保证。不管是数据库文件还是备份文件,它不保证数据本身的安全,使用过程要注意备份好密钥和证书,否则据本人了解,只有通过导数据到新的库来确保数据库的可迁移性。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Parsing Techniques

Parsing Techniques

Dick Grune、Ceriel J.H. Jacobs / Springer / 2010-2-12 / USD 109.00

This second edition of Grune and Jacobs' brilliant work presents new developments and discoveries that have been made in the field. Parsing, also referred to as syntax analysis, has been and continues......一起来看看 《Parsing Techniques》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器