积极答复者
SQL SERVER 2005 使用证书恢复后,解密功能失效

问题
-
我用如下的SQL 语句创建MASTER KEY ,CERTIFICATE ,然后用CERTIFICATE 做加密解密的测试,一切正常。
-- Use the ReportServerTempDB database
USE ReportServerTempDB ; -- Create a Database Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';-- Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate1
WITH SUBJECT = 'Test Certificate',
START_DATE = '1/1/2006',
EXPIRY_DATE = '10/31/2011';
declare @b as varchar(200)
declare @d as varchar(200)
set @b='123';
set @d=EncryptByCert(Cert_ID('TestCertificate1'), @b)
select CONVERT(VARCHAR, DecryptByCert(Cert_ID('TestCertificate1'), @d) )但是我BACKUP CERTIFICATE ,并手工删除了 CERTIFICATE TestCertificate1 ,然后再重新创建CERTIFICATE ,结果却无法解密了,
BACKUP CERTIFICATE TestCertificate1 TO FILE = 'C:\dell\cc2';
GO
CREATE CERTIFICATE TestCertificate1 FROM FILE = 'C:\dell\cc2'declare @b as varchar(200)
declare @d as varchar(200)
set @b='123';
set @d=EncryptByCert(Cert_ID('TestCertificate1'), @b)
select CONVERT(VARCHAR, DecryptByCert(Cert_ID('TestCertificate1'), @d) )上面的语句老是返回NULL而不是期望的123,这是怎么回事啊?
答案
-
没有private key的证书是无法加密的。
所以语句执行到
declare @b as varchar(200)
declare @d as varchar(200)
set @b='123';
set @d=EncryptByCert(Cert_ID('TestCertificate1'), @b)
这时候@d已经是个null,所以接下来揭秘得到的也是null,需要在备份是将priate key也显示的备份先来...然后还原时加上private key
BACKUP CERTIFICATE certname TO FILE = 'path_to_file'
[ WITH PRIVATE KEY
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com- 已标记为答案 LiweiyinMicrosoft employee, Moderator 2010年12月10日 16:23
-
create certificate创建的证书是由private key,private key用于加密。
backup certificate xx to file='xx'这个语法只备份证书的public key。
这时候还原出来的证书也只有public key,无法加密
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com- 已标记为答案 Jacky_shen 2010年12月11日 4:51
-
create certificate创建的证书是由private key,private key用于加密。
backup certificate xx to file='xx'这个语法只备份证书的public key。
这时候还原出来的证书也只有public key,无法加密
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
非常感谢,不过我的疑问是,为什么我用下面的方法来创建证书的时候,加密解密都是正常的呢,我也没有设置它的private key跟public key啊
-- Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate1
WITH SUBJECT = 'Test Certificate',
START_DATE = '1/1/2006',
EXPIRY_DATE = '10/31/2011';
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com- 已标记为答案 Jacky_shen 2010年12月14日 1:40
全部回复
-
没有private key的证书是无法加密的。
所以语句执行到
declare @b as varchar(200)
declare @d as varchar(200)
set @b='123';
set @d=EncryptByCert(Cert_ID('TestCertificate1'), @b)
这时候@d已经是个null,所以接下来揭秘得到的也是null,需要在备份是将priate key也显示的备份先来...然后还原时加上private key
BACKUP CERTIFICATE certname TO FILE = 'path_to_file'
[ WITH PRIVATE KEY
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com- 已标记为答案 LiweiyinMicrosoft employee, Moderator 2010年12月10日 16:23
-
create certificate创建的证书是由private key,private key用于加密。
backup certificate xx to file='xx'这个语法只备份证书的public key。
这时候还原出来的证书也只有public key,无法加密
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com- 已标记为答案 Jacky_shen 2010年12月11日 4:51
-
create certificate创建的证书是由private key,private key用于加密。
backup certificate xx to file='xx'这个语法只备份证书的public key。
这时候还原出来的证书也只有public key,无法加密
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
非常感谢,不过我的疑问是,为什么我用下面的方法来创建证书的时候,加密解密都是正常的呢,我也没有设置它的private key跟public key啊
-- Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate1
WITH SUBJECT = 'Test Certificate',
START_DATE = '1/1/2006',
EXPIRY_DATE = '10/31/2011';
-
create certificate创建的证书是由private key,private key用于加密。
backup certificate xx to file='xx'这个语法只备份证书的public key。
这时候还原出来的证书也只有public key,无法加密
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
非常感谢,不过我的疑问是,为什么我用下面的方法来创建证书的时候,加密解密都是正常的呢,我也没有设置它的private key跟public key啊
-- Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate1
WITH SUBJECT = 'Test Certificate',
START_DATE = '1/1/2006',
EXPIRY_DATE = '10/31/2011';
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com -
create certificate创建的证书是由private key,private key用于加密。
backup certificate xx to file='xx'这个语法只备份证书的public key。
这时候还原出来的证书也只有public key,无法加密
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
非常感谢,不过我的疑问是,为什么我用下面的方法来创建证书的时候,加密解密都是正常的呢,我也没有设置它的private key跟public key啊
-- Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate1
WITH SUBJECT = 'Test Certificate',
START_DATE = '1/1/2006',
EXPIRY_DATE = '10/31/2011';
有dba的职位吗(北京的),请联系我 stswordman#hotmail.com- 已标记为答案 Jacky_shen 2010年12月14日 1:40