标签: transparent-data-encryption

在 SQL Server 2016 中,始终加密和透明数据加密有什么区别?

在我撰写本文时,我仍在等待 SQL Server 2016 的正式发布,以便我们可以探索其“始终加密”功能的实用性。

我只想知道 SQL Server 2016 中的 Always Encrypted 和当前可用的透明数据加密之间的具体区别是什么,以便我们可以为未来的项目做出正确的决定。

sql-server transparent-data-encryption sql-server-2016 always-encrypted

41
推荐指数
1
解决办法
2万
查看次数

查询以列出数据库的加密证书

使用什么证书来加密实例上的每个数据库。

我可以使用以下方法获取数据,但如何编写查询

USE master
GO

-- this provides the list of certificates
SELECT * FROM sys.certificates


-- this provides the list of databases (encryption_state = 3) is encrypted
SELECT * FROM sys.dm_database_encryption_keys
 WHERE encryption_state = 3;
Run Code Online (Sandbox Code Playgroud)

我注意到 sys.certifcates.thumbprint 和 sys.dm_database_encryption_keys.encryptor_thumbprint 列包含相同的数据。

security sql-server encryption transparent-data-encryption

19
推荐指数
2
解决办法
6万
查看次数

我什么时候需要备份服务主密钥?

我正在阅读一些关于透明数据加密的文档和白皮书。一些文档也提到备份服务主密钥(为了澄清,我不是在谈论数据库主密钥)。我只是不完全理解为什么这是必要的,因为我能够在不使用任何服务主密钥的情况下将具有 TDE 加密的数据库从服务器 A(备份)备份/恢复到服务器 B(恢复)。

什么场景下需要恢复Service Master Key?

sql-server encryption transparent-data-encryption

15
推荐指数
1
解决办法
2911
查看次数

备份压缩导致 SQL 2017 TDE 数据库损坏

在 SQL Server 2017 (CU3) 上,每当我在我的一个 TDE 数据库上启用备份压缩时,备份过程总是会损坏数据库中的特定页面。如果我在不压缩的情况下运行备份,它不会被损坏。以下是我为验证和重现此问题而采取的步骤:

  1. 在数据库“TDE_DB1”上运行 DBCC CheckDB;一切都很好,没有错误;
  2. 成功备份数据库,无需压缩;RESTORE VERIFYONLY 表示一切正常;
  3. 成功将数据库恢复为“TDE_DB2”;一切都很好,DBCC CheckDB 没有显示错误;
  4. 成功备份“TDE_DB1”数据库WITH压缩;RESTORE VERIFYONLY 错误,提示“检测到备份集损坏”;
  5. 尝试将数据库恢复为“TDE_DB2”;错误,说“RESTORE 在数据库中的页面 (1:92454) 上检测到错误”
  6. 重复步骤1-3;一切都很好;
  7. 删除“TDE_DB1”和“TDE_DB2”;从备份中恢复“TDE_DB1”;一切都很好;
  8. 重复步骤1-5;得到相同的结果;

总结一下:数据库和常规备份看起来不错,在数据库上运行 CHECKDB 并在备份上运行 VERIFYONLY 不会报告任何错误。使用压缩备份数据库似乎会导致损坏。

下面是有错误的代码示例。(注意:在 TDE 数据库中使用压缩需要 MAXTRANSFERSIZE

-- Good, completes with no corruption;
BACKUP DATABASE [TDE_DB1] TO DISK = N'E:\MSSQL\Backup\TDE_DB1a.bak' WITH CHECKSUM;
RESTORE VERIFYONLY FROM DISK = N'E:\MSSQL\Backup\TDE_DB1a.bak' WITH CHECKSUM;

RESTORE DATABASE [TDE_DB2]
FROM DISK = 'E:\MSSQL\Backup\TDE_DB1a.bak'
WITH MOVE 'DataFileName' to 'E:\MSSQL\Data\TDE_DB2.mdf'
,MOVE 'LogFileName' to 'F:\MSSQL\Log\TDE_DB2_log.ldf';


-- Bad, I …
Run Code Online (Sandbox Code Playgroud)

sql-server corruption transparent-data-encryption sql-server-2017

13
推荐指数
1
解决办法
823
查看次数

我可以通过恢复 MASTER 数据库来恢复 TDE 证书吗?

(幸运的是,我们目前并未处于这种情况,只是提前计划,看看如果发生这种情况,我们的选择是什么。)

对于使用透明日期加密 (TDE) 加密的数据库,除非您有用于加密它的证书的备份,否则数据库备份的副本是不可恢复的。

如果你没有那个怎么办?还有其他选择吗?

如果整个服务器发生故障,在新硬件上恢复 MASTER 数据库的备份是否也会恢复证书?

sql-server encryption transparent-data-encryption disaster-recovery

10
推荐指数
2
解决办法
6520
查看次数

TDE 准备:用于还原的密钥/证书备份

我在开发环境中工作以更好地理解TDE加密。我让它与另一台服务器上的备份和恢复一起工作。有几个问题,我知道我需要使用相应的私钥备份证书。

USE master; 
GO 
BACKUP CERTIFICATE Test
TO FILE = 'C:\Test.cer'
WITH PRIVATE KEY
(FILE = 'C:\Test.pvk',
ENCRYPTION BY PASSWORD = 'Example12#')
Run Code Online (Sandbox Code Playgroud)

如果发生故障,这些需要在新服务器上移动/恢复。在需要恢复到另一台服务器的情况下,我还需要从源服务器备份什么吗?

还有关于私钥存储的任何建议吗?我目前的想法是将证书、私钥和密码备份到单独备份和异地复制的 KeePass 数据库中。

这留下了一个问题,即将 KeePass 私钥备份到哪里?

sql-server encryption transparent-data-encryption

10
推荐指数
1
解决办法
1353
查看次数

使用 MAXTRANSFERSIZE 和 CHECKSUM 时无法恢复启用 TDE 的数据库

更新@AmitBanerjee - Microsoft SQL Server 产品组的高级项目经理确认 MS 将调查该问题,因为它是一个缺陷。

有没有人遇到过在启用 TDE 并使用MAXTRANSFERSIZE> 65536(在我的情况下,我选择 65537 以便我可以压缩 TDE 数据库)的情况下恢复在 SQL Server 2016 上进行的备份的问题CHECKSUM

下面是一个repro:

--- create database 
create database test_restore
go
-- create table
create table test_kin (fname char(10))
go
-- Enable TDE 

use master
GO
CREATE CERTIFICATE test_restore WITH SUBJECT = 'test_restore_cert'
GO
SELECT name, pvt_key_encryption_type_desc, * FROM sys.certificates WHERE name = 'test_restore'
GO
use test_restore
go
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM …
Run Code Online (Sandbox Code Playgroud)

sql-server restore transparent-data-encryption sql-server-2016

10
推荐指数
1
解决办法
1231
查看次数

使用 SQL Server TDE 编写远程备份时网络流量是否加密?

他们确实说没有“愚蠢的问题”这样的东西,所以这里是:

我了解 SQL Server透明数据加密(TDE) 对静态数据进行加密,因此如果有人闯入您的存储并窃取这些文件,您的数据库文件 (.mdf) 和备份文件 (.bak) 将被加密。我也知道从磁盘读取数据时会解密数据,因此它在内存中未加密(在运动中)。因此,运行远程查询(select * from SensitiveData)的用户请求的数据在通过网络传输时将是未加密的,因此容易被拦截。

因此,假设以上所有内容都是正确的,这是我的愚蠢问题:如果我的 SQL Server 实例在计算机 A 上并且我的 TDE 数据库备份被注销到远程计算机 B 上的存储,备份操作数据是否在传输时加密?计算机 A 要写入计算机 B 的磁盘吗?我认为它必须是(因为我认为加密操作首先发生在计算机 A 上),但我无法在任何 Microsoft 文档或博客中找到对此的确认。同样,在还原操作期间——是否有人拦截了从计算机 B 上的磁盘传输的数据以还原计算机 A 上的数据库——他们会发现移动中的数据是加密的吗?

sql-server encryption network transparent-data-encryption

9
推荐指数
2
解决办法
424
查看次数

BACKUP MASTER KEY 失败,无法找到对称主密钥,因为它不存在

我正在尝试备份 TDE 数据库的主密钥,但 SQL Server 说没有。这有点奇怪,但我确定我只是做错了什么。我是服务器上的系统管理员,所以我应该能够看到所有内容。

这是失败的声明:

USE [my_db];
BACKUP MASTER KEY
TO FILE = 'C:\master_key'
ENCRYPTION BY PASSWORD = 'some_killer_password';
Run Code Online (Sandbox Code Playgroud)

并返回错误消息:

消息 15151,级别 16,状态 1,第 11 行
找不到对称密钥“主密钥”,因为它不存在或您没有权限。

我已使用以下内容查看有关数据库加密密钥和关联证书的详细信息,但是sys.certificates表中的证书详细信息为空。

USE [my_db];
SELECT DatabaseName = d.name
    , ddek.encryptor_type
    , ddek.opened_date
    , c.name
    , c.cert_serial_number
    , c.pvt_key_encryption_type_desc
    , c.subject
FROM sys.dm_database_encryption_keys ddek
    INNER JOIN sys.databases d ON ddek.database_id = d.database_id
    LEFT JOIN sys.certificates c ON ddek.encryptor_thumbprint = c.thumbprint
WHERE d.name <> 'tempdb' /* tempdb is auto-encrypted by SQL Server …
Run Code Online (Sandbox Code Playgroud)

sql-server transparent-data-encryption

9
推荐指数
1
解决办法
4223
查看次数

TDE - 大型数据库上的加密

我正在研究 VLDB 上的 TDE 实现,想知道是否有人拥有在生产服务器上启用加密的实际经验。

我可以期待什么样的问题(如果有的话)?我的测试显示在测试环境中影响很小,但我担心在生产环境中设置需要多长时间。任何反馈表示赞赏。

我在某处读到我需要在加密过程中禁用备份和数据库维护。这是真的?

这非常令人担忧,因为我的测试花了大约 4 天的时间来完成加密。

sql-server sql-server-2008-r2 encryption transparent-data-encryption vldb

8
推荐指数
1
解决办法
2283
查看次数