这与通常问这个问题的方式有点相反——我使用以下内容来创建数据库主密钥、证书和对称密钥:
这是我创建证书/密钥的方式(显然是使用真实密码):
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = '123456'
CREATE CERTIFICATE EncryptionCert
WITH SUBJECT = 'EncryptionCert'
CREATE SYMMETRIC KEY SymmetricKey
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE EncryptionCert;
然后,我使用该密钥加密了一些数据,备份了数据库,并将其恢复到另一个盒子。
我的期望是,在我第一次从旧盒子迁移服务主密钥之前,我无法解密数据,但实际上我能够在恢复后立即执行此操作,而无需提供单个证书或密码。
我推断这是因为我使用 Amazon EC2 图像来创建盒子,所以我假设从该图像创建的每个盒子都具有相同的服务主密钥。
为了尝试强制更改服务密钥,我运行了:
alter service master key regenerate
在两个盒子上。
我从一个新数据库、新密钥/证书等重新开始,这一次,当我将备份移动到新盒子时,我无法自动读取数据,但我必须首先提供数据库的密码我创建的主密钥。一旦我这样做了,我就能够获取数据。
从我阅读的所有内容中,我会认为如果不先移动服务主密钥,我将无法解密主密钥。
我担心不需要服务主密钥仍然是由于我的测试环境的奇怪,并且当我尝试真正做到这一点时,我可能会在一年内搞砸。
任何人都可以阐明这里发生的事情吗?SQL 中是否发生了一些变化,使得不需要移动服务主密钥,或者我是否以不需要移动它的方式创建了数据库主密钥?还是我得到了潜在的错误结果?