CREATE DATABASE ENCRYPTION KEY (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例Analytics Platform System (PDW)

创建用于以透明方式加密数据库的加密密钥。 有关透明数据加密(TDE)的详细信息,请参阅透明数据加密(TDE)。

Transact-SQL 语法约定

语法

-- Syntax for SQL Server  

CREATE DATABASE ENCRYPTION KEY  
       WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }  
   ENCRYPTION BY SERVER   
    {  
        CERTIFICATE Encryptor_Name |  
        ASYMMETRIC KEY Encryptor_Name  
    }  
[ ; ]  
-- Syntax for Parallel Data Warehouse  

CREATE DATABASE ENCRYPTION KEY  
       WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }  
   ENCRYPTION BY SERVER CERTIFICATE Encryptor_Name   
[ ; ]  

注意

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

参数

WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }
指定用于加密密钥的加密算法。

警告

从 SQL Server 2016 开始,除 AES_128、AES_192 和 AES_256 以外的所有算法都不再使用。 若要使用旧算法(不推荐),必须将数据库设置为兼容级别 120 或更低。

ENCRYPTION BY SERVER CERTIFICATE Encryptor_Name
指定用于加密数据库加密密钥的加密程序的名称。

ENCRYPTION BY SERVER ASYMMETRIC KEY Encryptor_Name
指定用于加密数据库加密密钥的非对称密钥的名称。 要使用非对称密钥对数据库加密密钥进行加密,非对称密钥必须驻留在可扩展密钥管理提供程序上。

注解

在使用透明数据加密(TDE)加密数据库之前,需要数据库加密密钥。 以透明方式加密数据库时,将在文件级别上加密整个数据库,而无需对代码进行特殊修改。 用于加密数据库加密密钥的证书或非对称密钥必须位于 master 系统数据库中。

用于 TDE 的证书或非对称密钥限于 3072 比特的私钥大小。

只允许对用户数据库使用数据库加密语句。

数据库加密密钥不能从数据库中导出。 它只能供系统、对服务器拥有调试权限的用户以及能够访问证书(用于加密和解密数据库加密密钥)的用户使用。

数据库所有者 (dbo) 发生更改时不必重新生成数据库加密密钥。

系统会为 SQL 数据库自动创建一个数据库加密密钥。 用户无需使用 CREATE DATABASE ENCRYPTION KEY 语句创建密钥。

权限

需要数据库的 CONTROL 权限和用于加密数据库加密密钥的证书或非对称密钥的 VIEW DEFINITION 权限。

示例

有关使用 TDE 的其他示例,请参阅透明数据加密 (TDE)使用 EKM 在 SQL Server 上启用 TDE使用 Azure Key Vault 的可扩展密钥管理 (SQL Server)

下面的示例使用 AES_256 算法创建一个数据库加密密钥,并使用名为 MyServerCert 的证书保护私钥。

USE AdventureWorks2022;  
GO  
CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_256  
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
GO  

另请参阅

透明数据加密 (TDE)
SQL Server 加密
SQL Server 和数据库加密密钥(数据库引擎)
加密层次结构
ALTER DATABASE SET 选项 (Transact-SQL)
ALTER DATABASE ENCRYPTION KEY (Transact-SQL)
DROP DATABASE ENCRYPTION KEY (Transact-SQL)
sys.dm_database_encryption_keys (Transact-SQL)