SQL Server 使用加密密钥来帮助保护存储在服务器数据库中的数据、凭据和连接信息。 SQL Server 有两种类型的密钥: 对称 密钥和非 对称密钥。 对称密钥使用相同的密码来加密和解密数据。 非对称密钥使用一个密码来加密数据(称为 公钥 ),另一个密码用于解密数据(称为 私钥 )。
在 SQL Server 中,加密密钥包括用于保护敏感数据的公共密钥、私钥和对称密钥的组合。 首次启动 SQL Server 实例时,在 SQL Server 初始化期间创建对称密钥。 SQL Server 使用该密钥来加密存储在 SQL Server 中的敏感数据。 公钥和私钥由作系统创建,用于保护对称密钥。 为每个在数据库中存储敏感数据的 SQL Server 实例创建公钥和私钥对。
SQL Server 和数据库密钥的应用
SQL Server 有两个主要密钥用途:一个是针对 SQL Server 实例生成的服务主密钥(SMK),另一个是用于数据库的数据库主密钥(DMK)。
SMK 是在首次启动 SQL Server 实例时自动生成的,用于加密链接的服务器密码、凭据和数据库主密钥。 SMK 通过使用 Windows 数据保护 API(DPAPI)的本地计算机密钥进行加密。 DPAPI 使用从 SQL Server 服务帐户的 Windows 凭据和计算机凭据派生出的密钥。 服务主密钥只能由创建服务帐户或有权访问计算机的凭据的主体解密。
数据库主密钥是一个对称密钥,用于保护数据库中存在的证书和非对称密钥的私钥。 它也可以用于加密数据,但它有长度限制,使得相比使用对称密钥来加密数据,它的实用性较低。
创建时,主密钥使用 Triple DES 算法和用户提供的密码进行加密。 若要启用主密钥的自动解密,请使用 SMK 对密钥的副本进行加密。 它存储在所使用的数据库和 master 系统数据库中。
master 系统数据库中存储的 DMK 副本将在 DMK 更改时被静默更新。 但是,可以使用DROP ENCRYPTION BY SERVICE MASTER KEY语句中的ALTER MASTER KEY选项更改此默认值。 要打开未被服务主密钥加密的 DMK,必须使用 OPEN MASTER KEY 语句和密码。
管理 SQL Server 和数据库密钥
管理加密密钥包括创建新的数据库密钥、创建服务器和数据库密钥的备份,以及了解何时以及如何还原、删除或更改密钥。
若要管理对称密钥,可以使用 SQL Server 中包含的工具执行以下作:
备份服务器和数据库密钥的副本,以便可以使用它们恢复服务器安装,或作为计划迁移的一部分。
将以前保存的密钥还原到数据库。 这样,新的服务器实例便可以访问它最初未加密的现有数据。
如果发生不太可能的情况,导致无法再访问加密数据,请删除数据库中的加密数据。
在不太可能泄露密钥的情况下重新创建密钥并重新加密数据。 作为安全最佳做法,应定期(例如,每隔几个月)重新创建密钥,以保护服务器免受尝试破译密钥的攻击。
在服务器横向扩展部署中添加或删除服务器实例,其中多个服务器共享单个数据库和提供该数据库的可逆加密的密钥。
重要安全信息
访问由服务主密钥保护的对象需要用于创建密钥或计算机(计算机)帐户的 SQL Server 服务帐户。 也就是说,计算机与创建密钥的系统相关联。 可以更改 SQL Server 服务帐户 或 计算机帐户,而不会失去对密钥的访问权限。 但是,如果同时更改这两个密钥,你将失去对服务主密钥的访问权限。 如果在没有这两个元素之一的情况下无法访问服务主密钥,则无法使用原始密钥解密加密的数据和对象。
如果没有服务主密钥,则无法还原使用服务主密钥保护的连接。
访问使用数据库主密钥保护的对象和数据只需要用于帮助保护密钥的密码。
谨慎
如果失去对前面所述的密钥的所有访问权限,你将失去对这些密钥保护的对象、连接和数据的访问权限。 可以还原服务主密钥,如此处所示的链接中所述,也可以返回到原始加密系统以恢复访问。 没有恢复访问权限的“后门”。
本节中
服务主密钥
提供有关服务主密钥及其最佳做法的简要说明。
可扩展的密钥管理 (EKM)
介绍如何将第三方密钥管理系统与 SQL Server 配合使用。
相关任务
使用 Azure Key Vault 的可扩展密钥管理 (SQL Server)
相关内容
CREATE MASTER KEY (Transact-SQL)
ALTER SERVICE MASTER KEY (Transact-SQL)
另请参阅
备份和还原 Reporting Services 加密密钥
删除和重新创建加密密钥(SSRS 配置管理器)
为 Scale-Out 部署添加和删除加密密钥(SSRS Configuration Manager)
透明数据加密 (TDE)