У нас есть обычная (т.е. не расширенная) хранимая процедура в SQL Server 2000 , которая вызывает внешний exe-файл. Этот exe-файл, в свою очередь, загружает DLL-файл, полученный из SDK, и вызывает из него некоторые процедуры (например, Init, DoStuff, Shutdown).
Единственная причина, по которой мы имеем этот внешний exe-компонент, заключается в том, что мы не хотели создавать расширенную хранимую процедуру, которая вызывала бы .dll. Мы полагали, что если dll завершится сбоем (маловероятное событие, но все же), то также произойдет сбой процесса SQL Server, а это не то, что мы хотели. При использовании внешнего exe-файла только этот exe может аварийно завершить работу.
Теперь мы обновляем SQL Server 2008 и рассматриваем возможность создания хранимой процедуры CLR, которая вызывает эту проблему и, следовательно, избавляется от exe. Этот SP, конечно, будет помечен как UNSAFE. В связи с этим вопрос заключается в том, является ли это безопасным (более безопасным, достаточно безопасным и т. Д.) Таким способом по сравнению с подходом расширенного SP?
Единственная важная вещь, которую я выследил на BOL:
Указание UNSAFE разрешает код в
собрание, чтобы выполнить незаконное
операции с SQL Server
пространство процесса, и, следовательно, может
потенциально ставит под угрозу надежность
и масштабируемость SQL Server
, но я не уверен, отвечает ли он на мой вопрос, потому что я не стремлюсь к «надежности и масштабируемости», а скорее после стабильности и поддержания работоспособности.
PS: Мы хотим избавиться от exe-файла, потому что это вызывает неудобства при управлении разрешениями SP (вы знаете, тот материал, который неожиданно применяется к вам, если вы вызываете SP, который содержит xp_cmdshell).