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