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


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

查看所有标签

猜你喜欢:

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

精通CSS(第2版)

精通CSS(第2版)

[英] Andy Budd、[英] Simon Collison、[英] Cameron Moll / 陈剑瓯 / 人民邮电出版社 / 2010-5 / 49.00元

本书汇集了最有用的CSS技术,介绍了CSS的基本概念和最佳实践,结合实例探讨了图像、链接和列表的操纵,还有表单设计、数据表格设计、纯CSS布局等核心CSS技术。此外,书中着眼于创建跨浏览器的技术,讨论了bug及其捕捉和修复技术,还将所有技术组合成两个精彩的实例,讲述这些技术的工作原理和实际用法。 本书适合具有HTML和CSS基础知识的读者阅读。一起来看看 《精通CSS(第2版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

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

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具