开发者社区> 问答> 正文

升级MS-SQLServer版本时,如何查找证书中的实体并将它们与证书脱钩?

在将MS-SQL Server 2005 Express Edition升级到MS-SQL Server 2005 Enterprise Edition的最后一幕中,我遇到了此错误:

无法删除该证书,因为使用该证书对一个或多个实体进行了签名或加密。要继续,请更正问题...

因此,如何查找和解耦使用此证书签名/加密的实体,以便删除证书并继续进行升级?

我还期望/假设升级设置将提供一个新证书,并将这些证书与以前的实体重新耦合,否则我将不得不在设置后强行这样做。

展开
收起
心有灵_夕 2019-12-26 21:36:28 1015 0
1 条回答
写回答
取消 提交回答
  • Microsoft论坛具有以下代码伪装,可以删除证书:

    use msdb   
    BEGIN TRANSACTION
    declare @sp sysname
    declare @exec_str nvarchar(1024)    
    declare ms_crs_sps cursor global for select object_name(crypts.major_id) from sys.crypt_properties crypts, sys.certificates certs where crypts.thumbprint = certs.thumbprint and crypts.class = 1 and certs.name = '##MS_AgentSigningCertificate##'    
    open ms_crs_sps    
    fetch next from ms_crs_sps into @sp    
    while @@fetch_status = 0  
    begin    
    if exists(select * from sys.objects where name = @sp) begin print 'Dropping signature from: ' + @sp set @exec_str = N'drop signature from ' + quotename(@sp) + N' by certificate [##MS_AgentSigningCertificate##]'   
    Execute(@exec_str)
    if (@@error <> 0)
    begin
    declare @err_str nvarchar(1024)
    set @err_str = 'Cannot drop signature from ' + quotename(@sp) + '. Terminating.'
    close ms_crs_sps
    deallocate ms_crs_sps
    ROLLBACK TRANSACTION
    RAISERROR(@err_str, 20, 127) WITH LOG
    return
    end
    end
    fetch next from ms_crs_sps into @sp
    end
    close ms_crs_sps
    deallocate ms_crs_sps
    COMMIT TRANSACTION
    go
    http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3876484&SiteID=17
    
    

    我没有尝试过该脚本,因此请在尝试之前备份您的数据和系统,并在此处更新结果。

    2019-12-26 21:36:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云数据库案例集下载 立即下载
SQL Server在电子商务中的应用与实践 立即下载
低代码开发师(初级)实战教程 立即下载