【问题标题】:OLE Error in SQLSQL 中的 OLE 错误
【发布时间】:2024-05-23 10:15:02
【问题描述】:

我有带有

的 Windows Server 2003 Standard x64 Edition SP2

Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Enterprise Edition (64-bit) o​​n Windows NT 5.2(Build 3790:Service Pack 2)

我下载了 CAPICOM Platform SDK Redistributable:http://www.microsoft.com/downloads/details.aspx?FamilyId=860EE43A-A843-462F-ABB5-FF88EA5896F6&displaylang=en

并从 c:\Windows\syswow64 和 c:\Windows\syswow64\regsvr32.exe capicom.dll 注册成功。

当我尝试运行时

DECLARE @S varchar(255) 
DECLARE @D varchar(255)
DECLARE @O int

EXEC @C = sp_OACreate 'CAPICOM.EncryptedData', @O OUT
IF @C <> 0
BEGIN
  EXEC sp_oageterrorinfo @O, @S out, @D out 
  SELECT err=CONVERT(VARBINARY(4),@C), source=@S, description=@D
  RETURN
END

我收到了错误消息。

0x80040154  ODSOLE Extended Procedure    Class not registered

我该怎么办?如何检查 CAPICOM.DLL 是否正确注册?

【问题讨论】:

    标签: sql-server tsql stored-procedures ole


    【解决方案1】:

    此答案提供了如何为 CAPICOM 注册代理项的演练,以便可以在 64 位进程中使用它。

    我实际上已经这样做了,以便在 64 位 SQL Server 中使用 CAPICOM,它工作正常。

    【讨论】:

      【解决方案2】:

      CAPICOM 不会提供 64 位 afaik,是 deprecated:

      CAPICOM 是一个仅 32 位的组件 可用于 以下操作系统:Windows 服务器 2008、Windows Vista、Windows XP 和 Windows 2000。相反,使用 .NET Framework 来实现安全性 特征。有关详细信息,请参阅 Alternatives to Using CAPICOM

      在 SQL 2005 itslef 中的加密函数和 CRL 过程访问 .Net 加密之间,坦率地说,我认为没有任何理由坚持使用 COM 加密 API。当然,我知道你可以拥有遗留代码并需要支持它,但对于新开发来说,这绝对是一个很大的禁忌。

      【讨论】:

      • 这是关于我支持的第三方应用程序。 64位SQL服务器有什么办法可以解密用CAPICOM加密的数据吗?
      • SQL Server 自己的函数不会解密 CAPICOM 加密数据,因为它们使用自己的格式(例如,它们附加了初始化向量)。但是 CLR 函数或过程完全能够使用 System.Cryptography 组件解密 CAPICOM 数据。
      【解决方案3】:

      这里是reason
      这个组件有 64 位版本吗?

      【讨论】:

      • 非常感谢。这个组件恐怕没有64位版本。
      最近更新 更多