2011-09-01 104 views
0

好的,这是我的问题。我正在使用DB主密钥,证书和对称密钥在SQL Server 2005中进行数据加密。我需要能够使用私钥恢复证书。但是,当我使用PRIVATE KEY运行CREATE CERTIFICATE时,证书会被拉入数据库中,但私钥不会显示出来。以下是我遵循的测试步骤。SQL Server 2005使用私钥/加密创建证书

创建数据库主密钥。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '12345' 

创建证书

CREATE CERTIFICATE MyCert 
WITH SUBJECT = 'My First Certificate', 
EXPIRY_DATE = '1/1/2199'; 

创建与MyCert加密对称密钥。

CREATE SYMMETRIC KEY MySymmetricKey 
WITH ALGORITHM = AES_256 
ENCRYPTION BY CERTIFICATE MyCert 

在select语句下面调用以显示键和证书在那里。 他们是。主数据库密钥,对称密钥和证书都在那里。

SELECT * FROM sys.symmetric_keys 

SELECT * FROM sys.certificates 

创建数据库证书的备份和关键

注意我试图把它们放在同一个文件夹中,并且也不能工作。

BACKUP CERTIFICATE MyCert TO FILE = 'C:\SQLDatabase\MyCert\MyCert.cert' 
WITH PRIVATE KEY (FILE = 'C:\SQLDatabase\MyKey\MySymmetricKey.key' , 
ENCRYPTION BY PASSWORD = '12345') 

放下钥匙,证明他们已经不在了。

DROP SYMMETRIC KEY MySymmetricKey 
DROP CERTIFICATE MyCert; 

对于仅由文件创建的证书,没有RESTORE。我使用WITH PRIVATE KEY将 创建证书。

当我运行此证书显示,但密钥不附带它。

我已验证它们在文件夹中,并且SQL可以访问这些文件夹。

我也尝试过使用私钥的ALTER CERTIFICATE,但仍然没有任何结果。

我错过了什么?

CREATE CERTIFICATE PayGoDBCert 
FROM FILE = 'C:\SQLDatabase\MyCert\MyCert.cert' 
WITH PRIVATE KEY (FILE = 'C:\SQLDatabase\MyKey\MySymmetricKey.key' , 
DECRYPTION BY PASSWORD = '12345') 

SELECT * FROM sys.symmetric_keys 
SELECT * FROM sys.certificates 

回答

0

在你的例子中,你删除了对称密钥,但不要重新创建它。

重新创建对称密钥,然后恢复证书。

请注意:用于保护备份证书的密码与用于加密证书私钥的密码不同。

让我们知道是否可以解决您的问题

+0

没有运气。在上面我不重新创建密钥,因为...我会假设...并且我们都知道你会得到什么,我会假设具有私有密钥的CREATE CERTIFICATE将获得使用私有密钥备份的私钥证书。这将是备份私钥的BACKUP CERTIFICATE的全部要点。在文件目录中,我看到了证书和密钥。但我无法把它带回来,只有证书。 – Jody

+0

作为一个笔记,当我尝试你的建议时,我无法读取用备份密钥加密的加密数据。此外,我删除了在论坛上发布的证书,密钥和密码的实际值。所以我可能会有一个错字,但回头看时它们看起来是一样的。 – Jody