始终加密的数据库

Always encrypted database

我们需要为所有数据库配置 Always Encrypted 功能。我们想在主数据库中创建通用的列主密钥,以便我们可以 link CMK 到服务器上的所有数据库。但是我们无法link master DB 中创建的CMK 到所有数据库。我们需要在每个数据库中单独创建主密钥。有没有办法在master数据库中创建一个CMK并引用服务器上的所有数据库。

Column Master Key 是每个数据库的对象,即您不能在数据库之间共享它。但是,它只不过是元数据,即存储实际密钥(证书)的指针。使用 Always Encrypted,数据库无权访问实际的加密密钥。它们存储在外部密钥存储中(Windows 证书存储、Azure Key Vault)。因此,您需要做的是通过在其余数据库中注册来复制(复制)现有证书。只需将现有 CMK 脚本编写为 CREATE COLUMN MASTER KEY 语句并在每个数据库中执行它:

CREATE COLUMN MASTER KEY [CMK_Auto1]
WITH
(
    KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
    KEY_PATH = N'CurrentUser/my/2CC027B4FCA85D4244B528E8CA5F73D1EBB18C69'
)
GO

这将在每个数据库中创建一个新的 CMK,但它们都将使用相同的 证书来加密数据。然后使用您使用上述脚本创建的现有 CMK 加密您想要的列。