SQL Server 和数据库加密密钥(数据库引擎)

SQL Server 使用加密密钥帮助保护存储在服务器数据库中的数据、凭据和连接信息。SQL Server 的密钥分为两种:“对称”和“非对称”。对称密钥使用相同的密码对数据进行加密和解密。非对称密钥使用一个密码来加密数据(称为公钥),使用另一个密码来解密数据(称为私钥)。

在 SQL Server 中,加密密钥包括一组用来保护敏感数据的公钥、私钥和对称密钥。当第一次启动 SQL Server 实例时,将在 SQL Server 初始化过程中创建对称密钥。SQL Server 使用此密钥来加密存储在 SQL Server 中的敏感数据。公钥和私钥由操作系统创建,用于保护对称密钥。对于在数据库中存储敏感数据的每个 SQL Server 实例,都要创建一个公钥私钥对。

SQL Server 和数据库密钥的应用

SQL Server 中的密钥应用主要有两个方面:在某 SQL Server 实例上为该实例生成的“服务主密钥”(SMK) 和用于数据库的“数据库主密钥”(DMK)。

当第一次启动 SQL Server 实例时,将自动生成 SMK 并用于对链接的服务器密码、凭据和数据库主密钥进行加密。SMK 是通过使用采用 Windows 数据保护 API (DPAPI) 的本地计算机密钥进行加密的。DPAPI 使用从 SQL Server 服务帐户的 Windows 凭据和计算机的凭据派生的密钥。服务主密钥只能由创建它时所用的服务帐户或可以访问该计算机凭据的主体进行解密。

数据库主密钥是一种用于保护数据库中存在的证书私钥和非对称密钥的对称密钥。它还可用于对数据进行加密,但由于它有长度限制,所以用于数据加密时实用性不如对称密钥。

当创建主密钥时,会使用 Triple DES 算法以及用户提供的密码对其进行加密。若要启用数据库主密钥的自动解密,请使用 SMK 对此密钥的副本进行加密。此密钥的副本存储在使用它的数据库和 master 系统数据库中。

每当更改 DMK 时,存储在 master 系统数据库中的 DMK 副本都将在没有提示的情况下更新。但是,使用 ALTER MASTER KEY 语句的 DROP ENCRYPTION BY SERVICE MASTER KEY 选项可以更改此默认设置。必须使用 OPEN MASTER KEY 语句和密码打开未使用服务主密钥进行加密的 DMK。

管理 SQL Server 和数据库密钥

对加密密钥的管理包括创建新数据库密钥,创建服务器和数据库密钥的备份以及了解还原、删除或更改密钥的条件和方式。

若要管理对称密钥,可以使用 SQL Server 中包括的工具执行下列操作:

  • 备份服务器和数据库密钥的副本,以便可以使用这些密钥来恢复服务器安装,或作为计划迁移的一部分。

  • 将以前保存的密钥还原到数据库。这样,新服务器实例就可以访问最初不是由其加密的现有数据。

  • 当不能再访问加密数据时删除数据库中的加密数据,这种情况极少出现。

  • 当密钥的安全性受到威胁时,重新创建密钥并重新对数据进行加密,这种情况极少出现。作为安全性方面的最佳做法,您应定期(例如,每隔几个月)重新创建密钥以保护服务器,使其能够抵御试图解开密钥的攻击。

  • 在服务器扩展部署(多个服务器同时共享单个数据库以及为该数据库提供可逆加密的密钥)中添加或删除服务器实例。

重要的安全信息

访问由服务主密钥保护的对象需要使用用来创建该密钥的 SQL Server 服务帐户或计算机帐户。即,计算机与创建密钥的系统绑定在一起。您可以更改 SQL Server 服务帐户或计算机帐户,而不会失去对密钥的访问权限。但是,如果同时更改两者,则将失去对服务主密钥的访问权限。如果在不具有这两个元素中的任何一个的情况下失去了服务主密钥的访问权限,则将无法对使用原始密钥加密的数据和对象进行解密。

如果没有服务主密钥,则将无法还原受服务主密钥保护的连接。

访问受数据库主密钥保护的对象和数据只需要有用于帮助保护密钥的密码。

注意事项注意

如果失去了对前述密钥的所有访问权限,则将无法访问由这些密钥保护的对象、连接和数据。可按照此处显示的链接中说明的方法还原服务主密钥,也可以返回原始加密系统来恢复访问权限。没有用来恢复访问权限的“后门”。

本节内容