RESTORE MASTER KEY (Transact-SQL)

适用于:SQL Server

从备份文件中导入数据库主密钥。

重要

SQL Server 2022 (16.x) 支持将数据库主密钥备份和还原到 Azure Blob 存储以及从 Azure Blob 存储备份和还原数据库主密钥。 URL 语法仅适用于 SQL Server 2022 (16.x) 及更高版本。

Transact-SQL 语法约定

语法

RESTORE MASTER KEY FROM 
  {
    FILE = 'path_to_file'
  | URL = 'Azure Blob storage URL'
  }  
    DECRYPTION BY PASSWORD = 'password'  
    ENCRYPTION BY PASSWORD = 'password'  
    [ FORCE ]  

注意

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

参数

FILE ='path_to_file'
指定存储数据库主密钥的完整路径(包括文件名)。 path_to_file 可以是本地路径,也可以是网络位置的 UNC 路径

URL =“Azure Blob 存储 URL”
适用于:SQL Server 2022 (16.x) 及更高版本
Azure Blob 存储的 URL,格式类似于 https://<storage_account_name>.blob.core.windows.net/<storage_container_name>/<backup_file_name>.bak

DECRYPTION BY PASSWORD ='password'
指定对从文件中导入的数据库主密钥进行解密时所需的密码。

ENCRYPTION BY PASSWORD ='password'
指定用于在将数据库主密钥加载到数据库之后对该密钥进行加密的密码。

FORCE
指定即使当前数据库主密钥未打开,或者如果 SQL Server 无法对使用该主密钥加密的某些私钥进行解密,RESTORE 过程也应继续执行。

注解

还原主密钥之后, SQL Server 会对使用当前活动的主密钥加密的所有密钥进行解密,然后使用还原后的主密钥对这些密钥进行加密。 这种大量消耗资源的操作应当安排在资源需求较低的时段执行。 如果当前的数据库主密钥未打开或无法打开,或者如果无法对任何使用该主密钥加密的密钥进行解密,则还原操作将失败。

请仅在主密钥无法恢复或解密失败时,才使用 FORCE 选项。 仅由不可恢复密钥加密的信息将会丢失。

如果主密钥通过服务主密钥进行加密,则还原后的主密钥也通过该服务主密钥进行加密。

如果当前数据库中没有主密钥,则 RESTORE MASTER KEY 将创建一个主密钥。 新的主密钥不会自动使用服务主密钥进行加密。

如果使用的是 SQL Server 2022 (16.x) 及更高版本,并且想要从 Azure Blob 存储还原数据库主密钥,则将应用以下先决条件:

  1. 具有 Azure 存储账户

  2. 创建存储访问策略和共享访问存储

  3. 使用共享访问签名创建 SQL Server 凭据

    有关详细信息,请参阅教程:将 Azure Blob 存储与 SQL Server 配合使用

权限

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

示例

下面的示例将从文件还原 AdventureWorks2022 数据库的数据库主密钥。

USE AdventureWorks2022;  
RESTORE MASTER KEY   
    FROM FILE = 'c:\backups\keys\AdventureWorks2022_master_key'   
    DECRYPTION BY PASSWORD = '3dH85Hhk003#GHkf02597gheij04'   
    ENCRYPTION BY PASSWORD = '259087M#MyjkFkjhywiyedfgGDFD';  
GO  

下面的示例将从 Azure Blob 存储还原 AdventureWorks2022 数据库的数据库主密钥。

USE AdventureWorks2022;  
RESTORE MASTER KEY   
    FROM URL = 'https://mydocsteststorage.blob.core.windows.net/mytestcontainer/AdventureWorks2022_master_key.bak'   
    DECRYPTION BY PASSWORD = '3dH85Hhk003#GHkf02597gheij04'   
    ENCRYPTION BY PASSWORD = '259087M#MyjkFkjhywiyedfgGDFD';  
GO  

另请参阅

CREATE MASTER KEY (Transact-SQL)
ALTER MASTER KEY (Transact-SQL)
加密层次结构
RESTORE SYMMETRIC KEY