如何更改 SQL Server 主密钥密码?

Ron*_*ohn 4 encryption sql-server-2012 transparent-data-encryption

我创建了一个主密钥,然后创建了一个证书并加密了我的数据库。

CREATE MASTER KEY ENCRYPTION
BY PASSWORD='A Very Strong Password';
GO

CREATE CERTIFICATE foo
WITH 
SUBJECT='Database Encryption for Multi';
GO

USE mydatabase
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE foo;
GO

ALTER DATABASE mydatabase SET ENCRYPTION ON;
GO
Run Code Online (Sandbox Code Playgroud)

如何更改主密钥密码?

谢谢

Han*_*non 5

根据Microsoft Docs页面,语法是:

ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'password';
Run Code Online (Sandbox Code Playgroud)

从该文档页面:

REGENERATE 选项重新创建数据库主密钥及其保护的所有密钥。密钥首先用旧的主密钥解密,然后用新的主密钥加密。除非主密钥已被泄露,否则应在需求低的时期安排这种资源密集型操作。

但是,请确保您了解更改密钥的后果,并确保备份新密钥。

查看我最近的帖子以获取更多详细信息。

一些注意事项:

  1. 您实际上并没有使用 ALTER MASTER KEY REGENERATE 修改现有的主密钥。您实际上是在解密任何依赖于密钥的东西,然后丢弃旧密钥并创建一个全新的密钥,然后使用该新密钥重新加密之前使用旧密钥加密的所有内容。

  2. 您需要成为 sysadmin 组的成员才能更改主密钥。此外,更改主密钥不会解密和重新加密任何 TDE 加密的数据库,它只是加密和重新加密已使用密钥加密的证书。这些证书仍然有效,不会以任何方式修改;只是它们受到新的主密钥的保护。

  3. 在脚本中保存密码总是一个问题。过去我通过将与证书相关的脚本视为受保护来解决这个问题,就像我保护 TDE 密钥一样。在源代码控制系统中,有必要对脚本应用访问控制,以确保只有经过授权的系统管理员才能访问它们。