Это преследует меня уже 2 дня.У меня есть CLR sp, который нуждается в EXTERNAL_ACCESS.Я могу развернуть его через VS2010 на своем компьютере разработчика, установив TRUSTWORTHY ON, но мы не хотим делать это на рабочем сервере.Мы приобрели сертификат, совместимый с AuthentiCode, и я попытался подписать свою сборку этим, но это не удалось из-за цепочки, поэтому я следовал инструкциям , подробно изложенным здесь, чтобы удалить цепочку из сертификата .
Затем я попытался подписать сборку в VS, но получил сообщение об ошибке «Была сделана попытка сослаться на токен, который не существует.»
Итак, перешел в командную строку и подписал сборку с помощьюСнятие цепочки с сертификата с использованием SignTool.exe, как рекомендовали несколько блоггеров.Утилита сообщает, что подписывание выполнено успешно.
Теперь нужно импортировать сборку в SQL Server (Express 2008R2) на моем компьютере разработчика.Сначала отключите TRUSTWORTHY, так как эту процедуру придется применить к производственному серверу.Затем я запускаю
CREATE ASSEMBLY SqlClrProcedures from 'c:\<snip>\SqlClrProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
Получается следующая ошибка: * CREATE ASSEMBLY для сборки 'SqlClrProcedures' не выполнен, поскольку сборка 'SqlClrProcedures' не авторизована для PERMISSION_SET = EXTERNAL_ACCESS.Сборка авторизуется, если выполняется одно из следующих условий: владелец базы данных (DBO) имеет разрешение EXTERNAL ACCESS ASSEMBLY, а база данных имеет свойство базы данных TRUSTWORTHY;или сборка подписана сертификатом или асимметричным ключом, который имеет соответствующий логин с разрешением EXTERNAL ACCESS ASSEMBLY. *
Я вошел в систему как sa.Итак, я создаю пользователя, назначаю ему владение базой данных и предоставляю ему ВНЕШНИЙ ДОСТУП:
GRANT EXTERNAL ACCESS Assembly to ClrLogin
Затем попробуйте
CREATE ASSEMBLY SqlClrProcedures AUTHORIZATION ClrLogin from 'c:\<snip>\SqlClrProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
, который выдает ту же ошибку выше.
dbo был предоставлен EXTERNAL ACCESS ASSEMBLY, и сборка подписана, но я не понимаю часть о соответствующем входе в систему. Нужна ли учетная запись для сертификата?
Если установить TRUSTWORTHY ON только дляПройдите CREATE ASSEMBLY, сборка импортируется нормально, но когда я запускаю sp, я получаю эту ошибку:
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65573. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error:
System.IO.FileLoadException: Could not load file or assembly 'sqlclrprocedures, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An error relating to security occurred. (Exception from HRESULT: 0x8013150A)
System.IO.FileLoadException:
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
, поэтому кажется, что сертификат не распознается.Может кто-нибудь подсказать, пожалуйста, что я делаю не так?