加密数据库中的恢复数据

适用于: Configuration Manager(current branch)

创建 BitLocker 管理策略时,Configuration Manager将恢复服务部署到管理点。 在 BitLocker 管理策略的“ 客户端 管理”页上, 配置 BitLocker 管理服务时,客户端会将密钥恢复信息备份到站点数据库。 此信息包括 BitLocker 恢复密钥、恢复包和 TPM 密码哈希。 当用户被锁定在其受保护的设备外时,你可以使用此信息帮助他们恢复对设备的访问。

鉴于此信息的敏感性,需要对其进行保护。 Configuration Manager需要在客户端和恢复服务之间建立 HTTPS 连接,以加密通过网络传输的数据。 有关详细信息,请参阅 通过网络加密恢复数据

还请考虑在站点数据库中存储时加密此数据。 如果安装SQL Server证书,Configuration Manager在 SQL 中加密数据。

如果不想创建 BitLocker 管理加密证书,请选择加入恢复数据的纯文本存储。 创建 BitLocker 管理策略时,请启用 “允许以纯文本形式存储恢复信息”选项。

注意

另一个安全层是加密整个站点数据库。 如果对数据库启用加密,则Configuration Manager中没有任何功能问题。

谨慎加密,尤其是在大规模环境中。 根据你加密的表和 SQL 的版本,你可能会注意到性能降低高达 25%。 更新备份和恢复计划,以便成功恢复加密的数据。

注意

Configuration Manager永远不会从数据库中删除或删除设备的恢复信息,即使客户端处于非活动状态或删除也是如此。 此行为出于安全原因。 它有助于处理设备被盗但后来被恢复的情况。 对于大型环境,对数据库大小的影响约为每个加密卷 9 KB 的数据。

SQL Server加密证书

将此SQL Server证书用于Configuration Manager以加密站点数据库中的 BitLocker 恢复数据。 可以使用 SQL Server 中的脚本创建自签名证书。

或者,可以使用自己的过程来创建和部署此证书,前提是它满足以下要求:

  • BitLocker 管理加密证书的名称必须为 BitLockerManagement_CERT

  • 使用数据库主密钥加密此证书。

  • 以下SQL Server用户需要对证书拥有控制权限:

    • RecoveryAndHardwareCore
    • RecoveryAndHardwareRead
    • RecoveryAndHardwareWrite
  • 在层次结构中的每个站点数据库上部署相同的证书。

  • 使用最新版本的 SQL Server 创建证书。

    重要

    • 使用 SQL Server 2016 或更高版本创建的证书与 SQL Server 2014 或更早版本兼容。
    • 使用 SQL Server 2014 或更低版本创建的证书与 SQL Server 2016 或更高版本不兼容。

在升级SQL Server管理加密证书

如果站点数据库位于 SQL Server 2014 或更低版本,请在将SQL Server升级到版本 2016 或更高版本之前,请使用以下过程将证书轮换为受支持的版本。

  1. 在运行最新可用版本(至少版本 2016)的SQL Server实例上:

    1. 创建新证书

    2. 备份新证书

  2. 在包含计划升级的加密站点数据库的 SQL Server 实例上:

    1. 将站点数据库服务器上的现有证书SQL Server实例移动到另一个名称。

    2. 还原新证书

    3. 在 中轮换现有证书的新证书。 使用提供的 SQL 函数 [RecoveryAndHardwareCore].[RecryptKey]

重要

如果在轮换证书之前升级SQL Server,请联系 Microsoft 支持部门 以获取解决方法的帮助。

如果业务要求指定需要定期续订此证书,还可以使用此过程。

示例脚本

这些 SQL 脚本是在 Configuration Manager 站点数据库中创建和部署 BitLocker 管理加密证书的示例。

创建证书

此示例脚本执行以下操作:

  • 创建证书
  • 设置权限
  • 创建数据库主密钥

在生产环境中使用此脚本之前,请更改以下值:

  • 站点数据库名称 (CM_ABC)
  • 创建主密钥 (MyMasterKeyPassword) 的密码
  • 证书到期日期 (20391022)
USE CM_ABC
IF NOT EXISTS (SELECT name FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##')
BEGIN
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MyMasterKeyPassword'
END

IF NOT EXISTS (SELECT name from sys.certificates WHERE name = 'BitLockerManagement_CERT')
BEGIN
    CREATE CERTIFICATE BitLockerManagement_CERT AUTHORIZATION RecoveryAndHardwareCore
    WITH SUBJECT = 'BitLocker Management',
    EXPIRY_DATE = '20391022'

    GRANT CONTROL ON CERTIFICATE ::BitLockerManagement_CERT TO RecoveryAndHardwareRead
    GRANT CONTROL ON CERTIFICATE ::BitLockerManagement_CERT TO RecoveryAndHardwareWrite
END

注意

当证书用于数据库加密时,SQL Server不会检查或强制实施证书过期日期,如下所示。

如果业务要求指定定期续订此证书,请在升级SQL Server使用相同的过程管理加密证书

备份证书

此示例脚本备份证书。 将证书保存到文件时,可以将其 还原 到层次结构中的其他站点数据库。

在生产环境中使用此脚本之前,请更改以下值:

  • 站点数据库名称 (CM_ABC)
  • 文件路径和名称 (C:\BitLockerManagement_CERT_KEY)
  • 导出密钥密码 (MyExportKeyPassword)
USE CM_ABC
BACKUP CERTIFICATE BitLockerManagement_CERT TO FILE = 'C:\BitLockerManagement_CERT'
    WITH PRIVATE KEY ( FILE = 'C:\BitLockerManagement_CERT_KEY',
        ENCRYPTION BY PASSWORD = 'MyExportKeyPassword')

重要

始终备份证书。 如果需要恢复站点数据库,可能需要还原证书以重新获得对恢复密钥的访问权限。

将导出的证书文件和关联的密码存储在安全位置。

还原证书

此示例脚本从文件还原证书。 使用此过程部署在另一个站点数据库上创建的证书。

在生产环境中使用此脚本之前,请更改以下值:

  • 站点数据库名称 (CM_ABC)
  • 主密钥密码 (MyMasterKeyPassword)
  • 文件路径和名称 (C:\BitLockerManagement_CERT_KEY)
  • 导出密钥密码 (MyExportKeyPassword)
USE CM_ABC
IF NOT EXISTS (SELECT name FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##')
BEGIN
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MyMasterKeyPassword'
END

IF NOT EXISTS (SELECT name from sys.certificates WHERE name = 'BitLockerManagement_CERT')
BEGIN

CREATE CERTIFICATE BitLockerManagement_CERT AUTHORIZATION RecoveryAndHardwareCore
FROM FILE  = 'C:\BitLockerManagement_CERT'
    WITH PRIVATE KEY ( FILE = 'C:\BitLockerManagement_CERT_KEY',
        DECRYPTION BY PASSWORD = 'MyExportKeyPassword')

GRANT CONTROL ON CERTIFICATE ::BitLockerManagement_CERT TO RecoveryAndHardwareRead
GRANT CONTROL ON CERTIFICATE ::BitLockerManagement_CERT TO RecoveryAndHardwareWrite
END

验证证书

使用此 SQL 脚本验证SQL Server是否成功创建了具有所需权限的证书。

USE CM_ABC
declare @count int
select @count = count(distinct u.name) from sys.database_principals u
join sys.database_permissions p on p.grantee_principal_id = u.principal_id or p.grantor_principal_id = u.principal_id
join sys.certificates c on c.certificate_id = p.major_id
where u.name in('RecoveryAndHardwareCore', 'RecoveryAndHardwareRead', 'RecoveryAndHardwareWrite') and
c.name = 'BitLockerManagement_CERT' and p.permission_name like 'CONTROL'
if(@count >= 3) select 1
else select 0

如果证书有效,则脚本将返回值 1

另请参阅

有关这些 SQL 命令的详细信息,请参阅以下文章:

后续步骤

部署 BitLocker 管理客户端