ALTER SERVICE MASTER KEY (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例

更改 SQL Server 实例的服务主密钥。

Transact-SQL 语法约定

语法

ALTER SERVICE MASTER KEY   
    [ { <regenerate_option> | <recover_option> } ] [;]  
  
<regenerate_option> ::=  
    [ FORCE ] REGENERATE  
  
<recover_option> ::=  
    { WITH OLD_ACCOUNT = 'account_name' , OLD_PASSWORD = 'password' }  
    |      
    { WITH NEW_ACCOUNT = 'account_name' , NEW_PASSWORD = 'password' }  

参数

FORCE
指示即使存在数据丢失的风险,也应当重新生成服务主密钥。 有关详细信息,请参阅本主题下文中的更改 SQL Server 服务帐户

REGENERATE
指示应当重新生成服务主密钥。

OLD_ACCOUNT ='account_name'
指定旧的 Windows 服务帐户的名称。

警告

此选项已过时。 请勿使用。 请改用 SQL Server 配置管理器。

OLD_PASSWORD ='password'
指定旧的 Windows 服务帐户的密码。

警告

此选项已过时。 请勿使用。 请改用 SQL Server 配置管理器。

NEW_ACCOUNT ='account_name'
指定新的 Windows 服务帐户的名称。

警告

此选项已过时。 请勿使用。 请改用 SQL Server 配置管理器。

NEW_PASSWORD ='password'
指定新的 Windows 服务帐户的密码。

警告

此选项已过时。 请勿使用。 请改用 SQL Server 配置管理器。

备注

当第一次需要使用服务主密钥对链接服务器密码、凭据或数据库主密钥进行加密时,便会自动生成服务主密钥。 使用本地计算机密钥和 Windows 数据保护 API 对服务主密钥进行加密。 该 API 使用从 SQL Server 服务帐户的 Windows 凭据中派生的密钥。

SQL Server 2012 (11.x) 使用 AES-256 加密算法来保护服务主密钥 (SMK) 和数据库主密钥 (DMK)。 AES 是一种比早期版本中使用的 3DES 更新的加密算法。 在将 数据库引擎 实例升级到 SQL Server 2012 (11.x) 后,应重新生成 SMK 和 DMK 以便将主密钥升级到 AES。 有关重新生成 DMK 的详细信息,请参阅 ALTER MASTER KEY (Transact-SQL)

更改 SQL Server 服务帐户

若要更改 SQL Server 服务帐户,请使用 SQL Server 配置管理器。 为了对服务帐户的变更进行管理,SQL Server 将存储服务主密钥的冗余副本,该密钥由具有授予 SQL Server 服务组的必要权限的计算机帐户对其加以保护。 在重建计算机时,将可以为该服务帐户以前使用的同一域用户恢复服务主密钥。 这不适用于本地帐户或者 Local System、Local Service 或 Network Service 帐户。 如果要将 SQL Server 迁移至另一台计算机,请使用备份和还原功能迁移服务主密钥。

REGENERATE 短语可以重新生成服务主密钥。 当重新生成服务主密钥时,SQL Server 会对所有使用该主密钥加密的密钥进行解密,然后使用新的服务主密钥对这些密钥进行加密。 这是一种消耗大量资源的操作。 在不危及密钥安全性的前提下,应当将该操作安排在资源需求较低的时段执行。 如果有任意一种解密操作失败,则整个语句将会失败。

即使密钥重新生成过程无法检索当前的主密钥,或者无法对所有使用该主密钥加密的私钥进行解密,使用 FORCE 选项也可以使得密钥重新生成过程继续进行。 只有在重新生成过程失败,并且无法使用 RESTORE SERVICE MASTER KEY 语句还原服务主密钥时,才使用 FORCE 选项。

注意

服务主密钥为 SQL Server 加密层次结构的根。 服务主密钥直接或间接地保护树中的所有其他密钥和机密内容。 如果在强制的重新生成过程中不能对某个相关密钥进行解密,则由该密钥所保护的数据会丢失。

如果将 SQL 移到另一计算机,则必须使用相同的服务帐户来解密 SMK - SQL Server 将自动修复计算机帐户加密。

权限

需要对服务器的 CONTROL SERVER 权限。

示例

下面的示例重新生成服务主密钥。

ALTER SERVICE MASTER KEY REGENERATE;  
GO  

另请参阅

RESTORE SERVICE MASTER KEY (Transact-SQL)
BACKUP SERVICE MASTER KEY (Transact-SQL)
加密层次结构