Как устранить исключение System.Security.SecurityException с помощью настраиваемого кода в SSRS?
Я создал сборку и ссылался на нее в отчете Reporting Services. Я тестировал отчет локально (работает), и затем я загрузил отчет на сервер отчетов (не работает).
Вот ошибка, которую выдает написанный мной код.
System.Security.SecurityException: Запрос разрешения типа "System.Security.Permissions.SecurityPermission, mscorlib, Version = 2.0.0.0, Culture = нейтрально, PublicKeyToken = b77a5c561934e089' не смогли. в System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission спрос, StackCrawlMark & stackMark, Int32 unrestrictedOverride, Int32 создать) в System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark & stackMark) при System.Security.CodeAccessPermission.Assert() по имени [Snipped Method Name] в ReportExprHostImpl.CustomCodeProxy. [Snipped Method Name] Не удалось выполнить действие: Спрос Тип первого Не удалось выполнить разрешение: System.Security.Permissions.SecurityPermission Зона сборки, которая не удалась был: MyComputer
Этот проект - это то, что я унаследовал, и я не знаком с ним. Хотя у меня есть код (сейчас), поэтому я могу хотя бы работать с ним:)
Я считаю, что этот код не работает:
Dim fio As System.Security.Permissions.FileIOPermission = New System.Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
fio.Assert()
Однако этот вид вещей повсюду тоже:
Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hhash As Integer, ByVal pbData As String, ByVal dwDataLen As Integer, ByVal dwFlags As Integer) As Integer
Я вижу, что это то, что службы Reporting Services не будут размещаться из коробки.
Ответы
Ответ 1
Вот как я смог решить проблему:
- строго подписать соответствующую сборку
-
изменить файл rssrvpolicy.config, чтобы добавить разрешения для сборки
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Test"
Description="This code group grants the Test code full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0024000004800000940100000602000000240000575341310004000001000100ab4b135615ca6dfd586aa0c5807b3e07fa7a02b3f376c131e0442607de792a346e64710e82c833b42c672680732f16193ba90b2819a77fa22ac6d41559724b9c253358614c270c651fad5afe9a0f8cbd1e5e79f35e0f04cb3e3b020162ac86f633cf0d205263280e3400d1a5b5781bf6bd12f97917dcdde3c8d03ee61ccba2c0"
/>
</CodeGroup>
Боковое примечание: вот отличный способ получить открытый ключ blob вашей сборки
трюк VS для получения токена открытого ключа и blob подписанной сборки.
Ответ 2
<system.web>
<trust level="Full"/>
</system.web>
попробуйте это в web.config
Ответ 3
Запустите службу в режиме администратора