什么时候 sp_OACreate 等。阿尔。被弃用?

ako*_*ata 4 sql-server ole-automation

我在支持的 SQL Server 实例上遇到了问题,许多 Stack 站点都提供了有关这些功能的信息,但大多数站点基本上都说“不要使用这些;它们已被弃用/有问题/有漏洞”。我将尝试针对我的特定问题实施变通办法,但我的问题是诸如sp_OACreate和 之类的功能何时sp_OAMethod被弃用?我必须向我的 Sys Admin 和老板解释这一点,以证明重写是合理的,而且我通过谷歌搜索并没有遇到太多(尽管我的搜索词可能很差)。

Sol*_*zky 6

虽然我找不到任何关于 OLE 自动化存储过程 ( sp_OA*)弃用的官方通知,但我相信它们通常被视为自 SQL Server 2005 发布以来已弃用。另一方面,扩展存储过程已被正式弃用从 SQL Server 2005 开始。由于引入了 CLR 集成功能(即 SQLCLR),这两个功能都已过时。

当功能被弃用时,它们会列在以下文档中:

SQL Server 2005 中已弃用的数据库引擎功能

该链接会将您带到该文档的 SQL Server 2005 版本。您可以使用顶部的下拉列表来检查其他版本。似乎没有版本列出“OLE 自动化”或“sp_OA”,因此似乎该功能并未正式弃用。

是的,您没听错,OLE 自动化存储过程存在漏洞和漏洞(或者至少在不同的时间/服务包级别)。它们不如 SQLCLR 安全(启用或禁用“OLE 自动化存储过程”功能;如果启用或禁用该功能,则无法控制谁使用该功能,或者如何使用该功能,这两者在某种程度上都是可控的 - - 在 SQLCLR 中)。

此外,据我所看到的,OLE自动化API(即COM)尚未更新到工作,介绍了作为SQL Server 2005中的任何数据类型(即MAX类型XMLDATETIMEDATETIMEOFFSET,CLR类型等)。

sp_OA*对于任何新代码,您应该使用 SQLCLR 而不是存储过程。对于正在运行的现有代码,保持原样可能没问题。但是,如果现有的sp_OA*代码被破坏,那么最好将其重写为 SQLCLR,而不是试图使该sp_OA*方法起作用。