首页 数据库 mysql教程 SQL Server 2008的透明数据加密(二)_MySQL

SQL Server 2008的透明数据加密(二)_MySQL

Jun 01, 2016 pm 02:00 PM
数据加密

SQLServer2008

上面代码的结果是:

Msg 33111, Level 16, State 3, Line 1

Cannot find server certificate with thumbprint '0x8AD8C0A89476752FCC3D7A7005A2DCF546C38C58'.

它起作用了。我们的数据库是安全的了。恢复或附加TestDatabase 到另一个实例中去的唯一方法是在第二个实例中添加相同的证书。学习下面的代码:

-- backup the certificate
-- The private key will be encrypted by the password specified
BACKUP CERTIFICATE DEKCertificate TO FILE = 'E:/DEKCertificate.cert'
         WITH PRIVATE KEY
         (
                  FILE = 'E:/Instance1PrivateKey.key',
                  ENCRYPTION BY PASSWORD = 'Pa$w0rd5454'
         )
-- create the certificate in the second instance by using the backup
-- Private key will be loaded from the saved file.
USE [master]
GO
CREATE CERTIFICATE DEKCertificate
         FROM FILE = 'E:/DEKCertificate.cert'
         WITH PRIVATE KEY (
                  FILE = 'E:/Instance1PrivateKey.key'
                  , DECRYPTION BY PASSWORD = 'Pa$w0rd5454'
                  )
 
这个代码的第一部分将这个证书备份到了一个文件中。它还备份了这个证书的私钥。代码中指定的密码是用于加密私钥的。代码的第二部分需要运行在第二个SQL Server 2008实例上。它使用备份证书创建了一个证书。当这个代码运行后,你将可以恢复或附加TestDatabase数据库到新的实例中去。

在激活TDE之前需要考虑什么?

在你在数据库上激活TDE之前只有很少的事情需要注意,那就是:

TDE是否影响所执行的灾难复原计划?

设想一个简单的灾难复原计划,备份和恢复。你可能开发了这个计划而且它执行没有任何问题。你激活了TDE,仍然没有问题,时间表作业备份了你的数据库。假设这个服务器开始产生严重错误导致你需要重新安装操作系统和SQL Server。你可能不做它想就轻松地重新安装,因为你有数据库备份。当数据库恢复时问题出现了。你可能具有不是加密格式的数据库完全备份,你可能有一些在激活TDE之后进行的事务型备份,所以它们是加密的。你没有用于TDE的证书备份。这导致你处于一个不可预料的境地。因为你没有所用证书的备份,所以你将不能恢复事务型备份。

想想在激活TDE之前灾难复原计划的开发。如果你有计划,那么确保这个计划在激活TDE之后仍然可用。这不只用于备份和恢复策略,它还用于其它计划,例如日志传送和数据库镜像。

在你的数据库中有只读文件组吗?

如果数据库有只读文件组,那么TDE将会失败。一旦TDE激活了,那么encryption_state的数值将永远不可能是3(加密的)而是2(加密中)。SQL Server在运行TDE代码时不会抛出任何异常。激活TDE之后,如果你打开数据库的属性窗口,你将会发现属性Encryption Enabled的值被设为了true。使用下面的代码进行测试:

-- create a new database for testing TDE on readonly file groups
USE master
GO
CREATE DATABASE [TestDatabase2] ON PRIMARY
( NAME = N'TestDatabase2_Primary', FILENAME = N'E:/TestDatabase2_Primary.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ),
FILEGROUP [FG1_Default]
( NAME = N'TestDatabase2_FG1', FILENAME = N'E:/TestDatabase2_FG1.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ),
FILEGROUP [FG2_ReadOnly]
( NAME = N'TestDatabase2_FG2', FILENAME = N'E:/TestDatabase2_FG2.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
LOG ON
( NAME = N'TestDatabase2_log', FILENAME = N'E:/TestDatabase2_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
-- Set the FG1_Default file group as the default one.
USE [TestDatabase2]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'FG1_Default')
ALTER DATABASE [TestDatabase2]
MODIFY FILEGROUP [FG1_Default] DEFAULT
GO

-- Add a table to the default file group
USE [TestDatabase2]
GO
CREATE TABLE TestTable1 (Id int PRIMARY KEY, [Text] varchar(100))
GO
INSERT INTO TestTable1 VALUES (1, 'hello')

-- Add a table to the FG2_ReadOnly file group
CREATE TABLE TestTable2 (Id int PRIMARY KEY, [Text] varchar(100))
ON [FG2_ReadOnly]
GO
INSERT INTO TestTable2 VALUES (1, 'hello')
GO

-- Set the file group FG2_ReadOnly file group as READONLY
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'FG2_ReadOnly')
ALTER DATABASE [TestDatabase2]
MODIFY FILEGROUP [FG2_ReadOnly] READONLY
GO

-- Create Database Encryption Key (DEK) in the user database
USE TestDatabase2
GO
IF NOT EXISTS (SELECT * FROM sys.dm_database_encryption_keys WHERE database_id = DB_ID('TestDatabase2'))
BEGIN
        CREATE DATABASE ENCRYPTION KEY
        WITH ALGORITHM = AES_128
        ENCRYPTION BY SERVER CERTIFICATE DEKCertificate
END
GO

-- Enable TDE on the database
ALTER DATABASE TestDatabase2
SET ENCRYPTION ON
GO

首先这个代码创建了一个具有三个数据文件的数据库,这三个文件叫做TestDatabase2_Primary、TestDatabase2_FG1和TestDatabase2_FG2。文件组FG1_Default 设置为默认文件组,在其中创建了TestTable1。在FG2_ReadOnly文件组中创建了TestTable2。然后FG1_ReadOnly文件组被标识为READONLY。

最后,在TestDatabase2 中创建了DEK,Encryption属性设置为true。所有的语句都成功执行。如果你查询sys.dm_database_encryption_keys,你将看到TestDatabase2的encryption_state是2,这表示加密结束了但没有完成。

是否使用了FileStream数据类型?

使用了filestream类型的数据库可以使用TDE来进行加密,但是文件流数据不会被加密。

当激活TDE之后会影响什么?

在一个数据库上激活TDE会影响以下事情:

事务日志

一旦TDE激活了,SQL Server 通过将文本数据清理出去从而确保日志文件不包含文本数据。SQL Server 从具有加密格式的新VLF开始。

TEMPDB系统数据库

当你在任何数据库上激活了TDE之后这将会自动加密。这会导致使用tempdb数据库的非加密数据库性能下降。

日志传送和数据库镜像

如果你在一个传送日志到另一个数据库的数据库(意味着激活了日志传送的数据库)上激活了TDE,那么日志传送操作将会在辅助数据库上失败,除非在辅助服务器上证书可用。

压缩备份

下面是在一个激活了TDE的数据库上进行压缩备份的测试,看起来在激活TDE的数据库上压缩并不怎么高效: 

-- create a new database for testing compressed backup on TDE enabled database
USE master
GO
CREATE DATABASE [TestDatabase3] ON PRIMARY
( NAME = N'TestDatabase3', FILENAME = N'E:/TestDatabase.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ),
LOG ON
( NAME = N'TestDatabase3_log', FILENAME = N'E:/TestDatabase3_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO

-- Create a table and insert some records
USE TestDatabase3
GO
CREATE TABLE TestTable (Id int primary key, [Value] char(8000))
GO
INSERT INTO TestTable VALUES (1, 'value1')
INSERT INTO TestTable VALUES (2, 'value1')
INSERT INTO TestTable VALUES (3, 'value1')
INSERT INTO TestTable VALUES (4, 'value1')
INSERT INTO TestTable VALUES (5, 'value1')
INSERT INTO TestTable VALUES (6, 'value1')

-- Backup the TestDatabase3 without compressing it
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:/TestDatabase3Full.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup'
GO

-- Backup the TestDatabase3 with  compression
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:/TestDatabase3Full_Compressed.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup (Compressed)', COMPRESSION
GO

-- Now enable TDE on this
-- Use the code we used with first example

-- Backup the TestDatabase3 again (after TDE enabled) without compressing it
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:/TestDatabase3Full_Encrypted.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup (encrypted)'
GO

-- Backup the TestDatabase3 with compression
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:/TestDatabase3Full_Encrypted_Compressed.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup (Encrypted and compressed', COMPRESSION
GO

这个代码创建一个数据库并插入一些记录到数据表中。然后这个数据库被备份两次,一次没有压缩另一次有压缩。然后你需要在这个数据库上激活TDE并执行其它的与激活TDE之前备份所使用的相同代码。备份文件规模是:

在激活TDE之前完全备份1,365 KB

在激活TDE之前有压缩的完全备份124KB

激活TDE之后的完全备份1,365 KB

激活TDE之后有压缩的完全备份 1,278 KB

你可以看到它们的不同。结果证明激活了TDE的数据库的压缩备份文件不那么高效。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Vue3+TS+Vite开发技巧:如何进行数据加密和存储 Vue3+TS+Vite开发技巧:如何进行数据加密和存储 Sep 10, 2023 pm 04:51 PM

Vue3+TS+Vite开发技巧:如何进行数据加密和存储随着互联网技术的快速发展,数据的安全性和隐私保护变得越来越重要。在Vue3+TS+Vite开发环境下,如何进行数据加密和存储,是每个开发人员都需要面对的问题。本文将介绍一些常用的数据加密和存储的技巧,帮助开发人员提升应用的安全性和用户体验。一、数据加密前端数据加密前端加密是保护数据安全性的重要一环。常用

PHP和SQLite:如何进行数据压缩和加密 PHP和SQLite:如何进行数据压缩和加密 Jul 29, 2023 am 08:36 AM

PHP和SQLite:如何进行数据压缩和加密在许多Web应用程序中,数据的安全性和存储空间的利用率是非常重要的考虑因素。PHP和SQLite是两个非常广泛使用的工具,本文将介绍如何使用它们来进行数据压缩和加密。SQLite是一种轻量级的嵌入式数据库引擎,它没有独立的服务器进程,而是直接与应用程序进行交互。PHP是一种流行的服务器端脚本语言,被广泛用于构建动态

如何使用Vue进行数据加密和安全传输 如何使用Vue进行数据加密和安全传输 Aug 02, 2023 pm 02:58 PM

如何使用Vue进行数据加密和安全传输引言:随着互联网的发展,数据的安全性越来越受到重视。在Web应用程序开发中,数据加密和安全传输是保护用户隐私和敏感信息的重要手段。Vue作为一种流行的JavaScript框架,提供了丰富的工具和插件,可以帮助我们实现数据加密和安全传输。本文将介绍如何使用Vue进行数据加密和安全传输,并提供代码示例供参考。一、数据加密数据加

如何在MySQL中进行数据的加密和解密存储? 如何在MySQL中进行数据的加密和解密存储? Jul 30, 2023 pm 09:13 PM

如何在MySQL中进行数据的加密和解密存储?摘要:数据安全是数据库管理的重要方面。本文将介绍如何在MySQL中使用加密算法对数据进行加密和解密存储,以提高数据的安全性。一、引言在现代的信息社会中,数据安全问题变得越来越重要。数据库中存储的数据可能会包含敏感信息,如用户密码、银行账号等。为了防止数据泄露和非法获取,我们需要对这些敏感信息进行加密存储。MySQL

利用MySQL和PowerShell开发:如何实现数据加密和解密功能 利用MySQL和PowerShell开发:如何实现数据加密和解密功能 Aug 01, 2023 pm 01:52 PM

利用MySQL和PowerShell开发:如何实现数据加密和解密功能概述:在现代互联网应用程序中,保护敏感数据的安全性是至关重要的。为了确保用户隐私和数据的完整性,开发人员通常会使用数据加密的技术。本文将介绍如何利用MySQL数据库和PowerShell脚本实现数据加密和解密功能。一、MySQL数据库中的数据加密MySQL提供了多种加密函数和算法来确保存储在

Vue与服务器端通信的刨析:如何保证数据安全性 Vue与服务器端通信的刨析:如何保证数据安全性 Aug 10, 2023 pm 04:01 PM

Vue与服务器端通信的探析:确保数据安全性继承自前端框架Vue.js的Vue服务器端通信作为一种常用的Web开发技术,为开发者们提供了更高效、更安全的数据交互方式。在本文中,我们将深入探讨Vue与服务器端通信的机制,重点关注如何保证数据安全性。通常,Vue通过HTTP协议与服务器进行通信,获取或提交数据。为确保数据传输的安全性,我们需要采取以下几个关键步骤。

如何在Python中进行数据加密和解密 如何在Python中进行数据加密和解密 Oct 18, 2023 am 10:15 AM

如何在Python中进行数据加密和解密,需要具体代码示例数据加密和解密是信息安全领域中非常重要的概念。在实际应用中,我们经常需要对敏感的数据进行加密保护,以防止未授权的访问和信息泄露。Python是一种功能强大的编程语言,提供了丰富的库和函数来实现数据加密和解密的操作。本文将介绍一些常用的加密算法和在Python中实现数据加密和解密的具体代码示例。一、MD5

ThinkPHP6数据加密与解密:保护敏感数据安全 ThinkPHP6数据加密与解密:保护敏感数据安全 Aug 25, 2023 pm 10:52 PM

ThinkPHP6数据加密与解密:保护敏感数据安全概述:随着互联网的迅速发展,数据安全问题变得越来越重要。特别是在网络应用开发中,对于一些敏感数据的保护至关重要。ThinkPHP6框架提供了一套强大的数据加密与解密机制,通过对敏感数据进行加密处理,可以有效地提高数据的安全性。使用ThinkPHP6的加密函数ThinkPHP6框架内置了多种加密函数,可以根据需

See all articles