CREATE MASTER KEY (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

在数据库中创建数据库主密钥。

重要

  • 应使用 BACKUP MASTER KEY 备份主密钥,并将备份存储于另外一个安全的位置中。
  • 在 SQL Server 中,还应使用 BACKUP SERVICE MASTER KEY 备份服务主密钥,并将备份存储在另外一个安全的位置中。

Transact-SQL 语法约定

语法

CREATE MASTER KEY [ ENCRYPTION BY PASSWORD ='password' ]
[ ; ]

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

PASSWORD ='password'

用于加密数据库主密钥的密码。 password 必须符合运行 SQL Server 实例的计算机的 Windows 密码策略要求。 password 在 SQL 数据库和 Azure Synapse Analytics 中是可选的

注解

数据库主密钥是一个对称密钥,用于保护数据库范围内凭据中存在的证书和非对称密钥的私钥和机密。 当创建主密钥时,会使用 AES_256 算法以及用户提供的密码对其进行加密。 在 SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x) 中使用三重 DES 算法。 若要启用主密钥的自动解密功能,可使用服务主密钥对该主密钥的副本进行加密,并将副本存储在数据库和 master 中。 通常,每当主密钥更改时,都会在不进行提示的情况下更新存储在 master 中的副本。 可以使用 ALTER MASTER KEY 的 DROP ENCRYPTION BY SERVICE MASTER KEY 选项对该默认行为进行更改。 必须使用 OPEN MASTER KEY 语句和密码打开服务主密钥未加密的主密钥

mastersys.databases 目录视图的 is_master_key_encrypted_by_server 列指示是否使用服务主密钥对数据库主密钥进行加密。

可以在 sys.symmetric_keys 目录视图中查看有关数据库主密钥的信息。

对于 SQL Server 和并行数据仓库,通常用服务主密钥和至少一个密码保护主密钥。 如果以物理方式(日志传送、还原备份等)将数据库移动到另一个服务器,数据库将包含主密钥的两份副本,一份由原始服务器服务主密钥进行加密(除非已使用 ALTER MASTER KEY DDL 显式删除此加密),一份由在 CREATE MASTER KEY 或后续 ALTER MASTER KEY DDL 操作过程中指定的每个密码进行加密。 移动数据库后,若要恢复主密钥以及所有数据(使用主密钥加密为密钥层次结构中的根),用户需要通过用于保护主密钥的其中一个密码,使用 OPEN MASTER KEY 语句在新服务器上还原主密钥的备份,或在新服务器上还原原始服务主密钥的备份。

对于 SQL 数据库 和 Azure Synapse Analytics,密码保护不被视为一种安全机制,以防止在数据库可能从一台服务器移动到另一台服务器的情况下发生数据丢失的情况,因为主密钥上的服务主密钥保护由 Microsoft Azure 平台管理。 因此,主密钥密码在 SQL 数据库 和 Azure Synapse Analytics 中是可选的。

对于SQL 数据库,可以自动创建数据库主密钥来保护用于审核的数据库范围内的凭据中的机密,以及需要数据库范围凭据向外部资源进行身份验证的其他功能,例如Azure 存储帐户。 主密钥是使用强随机选择的密码创建的。 用户无法在逻辑 master 数据库上创建主密钥。 主密钥密码对 Microsoft 未知,创建后不可发现。 因此,建议在创建数据库范围的凭据之前创建数据库主密钥。

服务主密钥和数据库主密钥是通过使用 AES-256 算法进行保护的。

权限

要求对数据库具有 CONTROL 权限。

示例

使用以下示例在数据库中创建数据库主密钥。 该密钥使用密码进行加密。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
GO

验证新键是否存在 ##MS_DatabaseMasterKey##

SELECT * FROM sys.symmetric_keys;
GO