可扩展的密钥管理 (EKM)
适用范围:SQL Server
SQL Server 提供数据加密功能以及“可扩展的密钥管理”(EKM),同时使用“Microsoft 加密 API”(MSCAPI) 访问接口进行加密和生成密钥。 在临时密钥容器中可创建用于数据和密钥加密的加密密钥,并且必须先将它们从访问接口中导出,然后才能存储在数据库中。 这种方法使 SQL Server 能够对密钥进行管理,其中包括加密密钥层次结构和密钥备份。
随着法规遵从性和数据隐私问题方面的需求不断增长,组织正利用加密方法来提供“深度防御”解决方案。 如果仅使用数据库加密管理工具,则这种方法通常是不切实际的。 硬件供应商通过使用“硬件安全模块”(HSM) 来提供能解决企业密钥管理的产品。 HSM 设备在硬件或软件模块上存储加密密钥。 由于加密密钥与加密数据分开存储,因此这是一种更安全的解决方案。
许多供应商提供 HSM 来解决密钥管理和加密加速问题。 HSM 设备对服务器进程使用硬件接口作为应用程序与 HSM 之间的媒介。 供应商还在他们的模块(可能是硬件或软件)上实施 MSCAPI 访问接口。 MSCAPI 通常只提供由 HSM 提供的功能子集。 供应商也可以针对 HSM、密钥配置和密钥访问提供管理软件。
HSM 的实现随供应商的不同而有所不同,将其用于 SQL Server 需要一个公共接口。 尽管 MSCAPI 提供此接口,但它仅支持 HSM 功能的子集。 另外它还存在其他限制,例如无法在本机保留对称密钥,以及缺少面向会话的支持。
SQL Server 可扩展密钥管理使第三方 EKM/HSM 供应商可以在 SQL Server 中注册其模块。 注册后,SQL Server 用户可以使用存储在 EKM 模块上的加密密钥。 这样,SQL Server 便可访问这些模块支持的高级加密功能(例如批量加密和解密)以及密钥管理功能(例如密钥老化和密钥轮换)。
当在 Azure VM 中运行 SQL Server 时,SQL Server 可以使用存储在 Azure 密钥保管库中的密钥。 有关详细信息,请参阅 使用 Azure Key Vault 的可扩展密钥管理 (SQL Server)。
EKM 配置
并非所有的 Microsoft SQL Server 版本都提供了可扩展密钥管理。 有关 SQL Server各版本支持的功能列表,请参阅 SQL Server 2016 各个版本支持的功能。
默认情况下,可扩展的密钥管理是关闭的。 若要启用此功能,请使用包含以下选项和值的 sp_configure 命令,如下面的示例所示:
sp_configure 'show advanced', 1
GO
RECONFIGURE
GO
sp_configure 'EKM provider enabled', 1
GO
RECONFIGURE
GO
注意
如果在不支持 EKM 的 SQL Server 版本中使用此选项的 sp_configure 命令,将会收到一条错误。
若要禁用该功能,请将此值设置为 0。 有关如何设置服务器选项的详细信息,请参阅 sp_configure (Transact-SQL)。
如何使用 EKM
使用 SQL Server 可扩展密钥管理可将保护数据库文件的加密密钥存储在智能卡、USB 设备或 EKM/HSM 模块等外部设备中。 这样还能针对数据库管理员(除 sysadmin 组中的成员)来保护数据。 可以通过使用只能由数据库用户通过外部 EKM/HSM 模块访问的加密密钥来实现数据加密。
可扩展的密钥管理还提供下列优点:
其他授权检查(启用责任分离)。
更高性能的基于硬件的加密/解密。
外部加密密钥生成。
外部加密密钥存储(物理分离数据和密钥)。
加密密钥检索。
外部加密密钥保留(启用加密密钥旋转)。
更易于加密密钥恢复。
可管理的加密密钥分发。
安全的加密密钥处置。
您可以对用户名和密码的组合或由 EKM 驱动程序定义的其他方法使用可扩展的密钥管理。
注意
若要进行故障排除,Microsoft 技术支持可能需要来自 EKM 提供程序的加密密钥。 您可能还需要访问供应商工具或进程,以帮助解决问题。
使用 EKM 设备进行身份验证
EKM 模块可以支持多种类型的身份验证。 每个提供程序只向 SQL Server 公开一种身份验证类型,也就是说,如果模块支持“基本”或“其他”身份验证类型,则提供程序将公开这两种类型中的一种,而不会同时公开这两种类型。
使用用户名/密码的 EKM 设备特定的基本身份验证
对于那些支持使用用户名/密码对的基本身份验证的 EKM 模块,SQL Server 提供使用凭据的透明身份验证。 有关凭据的详细信息,请参阅凭据(数据库引擎)。
可以为 EKM 提供程序创建凭据并将其映射到登录名(Windows 帐户和 SQL Server 帐户),以便根据每个登录名访问 EKM 模块。 凭据的 identify 字段包含用户名;secret 字段包含连接到 EKM 模块的密码。
如果 EKM 提供程序没有任何登录名映射的凭据,则使用映射到 SQL Server 服务帐户的凭据。
一个登录帐户可以映射多个凭据,只要它们用于不同的 EKM 访问接口即可。 每个 EKM 访问接口的每个登录名只能存在一个映射的凭据。 相同的凭据可以映射到其他登录名。
其他类型的 EKM 设备特定的身份验证
对于身份验证不是采用 Windows 或用户/密码组合的 EKM 模块,必须单独从 SQL Server 执行身份验证。
通过 EKM 设备的加密和解密
下述功能和特性可用于通过对称和非对称密钥来加密和解密数据:
功能 | 参考 |
---|---|
对称密钥加密 | CREATE SYMMETRIC KEY (Transact-SQL) |
非对称密钥加密 | CREATE ASYMMETRIC KEY (Transact-SQL) |
EncryptByKey(key_guid, 'cleartext', ...) | ENCRYPTBYKEY (Transact-SQL) |
DecryptByKey(ciphertext, ...) | DECRYPTBYKEY (Transact-SQL) |
EncryptByAsmKey(key_guid, 'cleartext') | ENCRYPTBYASYMKEY (Transact-SQL) |
DecryptByAsmKey(ciphertext) | DECRYPTBYASYMKEY (Transact-SQL) |
通过 EKM 密钥的数据库密钥加密
SQL Server 可以使用 EKM 密钥来加密数据库中的其他密钥。 您可以在 EKM 设备上同时创建和使用对称密钥和非对称密钥。 您可以使用 EKM 非对称密钥来加密本机(非 EKM)对称密钥。
下面的示例将创建一个数据库对称密钥并使用 EKM 模块上的密钥对其进行加密。
CREATE SYMMETRIC KEY Key1
WITH ALGORITHM = AES_256
ENCRYPTION BY EKM_AKey1;
GO
--Open database key
OPEN SYMMETRIC KEY Key1
DECRYPTION BY EKM_AKey1
有关 SQL Server 中的数据库和服务器密钥的详细信息,请参阅 SQL Server 和数据库加密密钥(数据库引擎)。
注意
您不能使用一个 EKM 密钥来加密另一个 EKM 密钥。
SQL Server 不支持对具有从 EKM 提供程序生成的非对称密钥的模块签名。
Related Tasks
使用 Azure Key Vault (SQL Server) 的可扩展密钥管理
另请参阅
CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)
DROP CRYPTOGRAPHIC PROVIDER (Transact-SQL)
ALTER CRYPTOGRAPHIC PROVIDER (Transact-SQL)
sys.cryptographic_providers (Transact-SQL)
sys.dm_cryptographic_provider_sessions (Transact-SQL)
sys.dm_cryptographic_provider_properties (Transact-SQL)
sys.dm_cryptographic_provider_algorithms (Transact-SQL)
sys.dm_cryptographic_provider_keys (Transact-SQL)
sys.credentials (Transact-SQL)
CREATE CREDENTIAL (Transact-SQL)
ALTER LOGIN (Transact-SQL)
CREATE ASYMMETRIC KEY (Transact-SQL)
ALTER ASYMMETRIC KEY (Transact-SQL)
DROP ASYMMETRIC KEY (Transact-SQL)
CREATE SYMMETRIC KEY (Transact-SQL)
ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL)
OPEN SYMMETRIC KEY (Transact-SQL)
备份和还原 Reporting Services 加密密钥
删除和重新创建加密密钥(SSRS 配置管理器)
添加和删除扩展部署的加密密钥(SSRS 配置管理器)
备份服务主密钥
还原服务主密钥
创建数据库主密钥
备份数据库主密钥
还原数据库主密钥
在两个服务器上创建相同的对称密钥