k0l*_*pak 8 sql-server-2005 sql-server-2008 sql-server encryption
我在另一个数据库上恢复对称密钥时遇到问题。我在第一个(旧)数据库中有加密列的表。(该表包含加密数据)旧数据库中的密钥已使用下一个 sql 脚本创建:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TESTPSWD'
GO
CREATE CERTIFICATE [CertificateSecurity] WITH SUBJECT = 'Key Protection';
GO
CREATE SYMMETRIC KEY [EncryptKey] WITH
ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE [CertificateSecurity]
GO
Run Code Online (Sandbox Code Playgroud)
现在我必须将这个包含所有数据的表移动到新数据库中。我从旧数据库中导入包含数据的表。还有一个问题:有没有办法在不指定key_source和identity_value的情况下,在新数据库中创建相同的加密密钥?(因为我没有它)我尝试使用与上面相同的 sql 查询创建它,但在这种情况下解密返回 NULL。
PS我知道我可以解密数据然后重新创建密钥(提供所有参数)并使用新密钥加密数据。但是找到另一种解决方案会很棒。
SQL Server 中没有内置解决方案。在未指定源和身份的情况下创建的对称密钥永远无法编写脚本或复制。
这意味着,在您的情况下,您必须在复制数据时即时解密和重新加密。
您还可以在当前数据库中创建一个新密钥(指定源和身份)并在本地解密和新密钥重新加密。然后您可以移动加密数据并在新位置重新创建密钥,因为您拥有可用于该新密钥的所有重要种子数据。