Как мне устранить неполадки в Системе?Безопасность.Исключение SecurityException с пользовательским кодом в SSRS?

StackOverflow https://stackoverflow.com/questions/32428

Вопрос

Я создал сборку и сослался на нее в своем отчете служб Reporting Services.Я протестировал отчет локально (работает), а затем загрузил отчет на сервер отчетов (не работает).

Вот ошибка, которая выдается пользовательским кодом, который я написал.

Система.Безопасность.Исключение SecurityException:Запрос разрешения системы типа '.Безопасность.Разрешения.Разрешение на безопасность, mscorlib, версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken=b77a5c561934e089' сбой.в Системе.Безопасность.CodeAccessSecurityEngine.Проверьте возврат также(PermissionToken permToken, CodeAccessPermission требовать, StackCrawlMark& stackMark, Int32 unrestrictedOverride, Int32 создать) в Системе.Безопасность.CodeAccessSecurityEngine.Утвердить (CodeAccessPermission cap, StackCrawlMark& stackMark) в Системе.Безопасность.CodeAccessPermission.Утверждать() в [Сокращенное имя метода] в ReportExprHostImpl.CustomCodeProxy.[Сокращенное имя метода] Действие, которое завершилось неудачей, было:Спрос тип первого разрешение, которое не было:Система.Безопасность.Разрешения.Разрешение безопасности Зона сборки, в которой произошел сбой была:Микрокомпьютер

Этот проект - то, что я унаследовал, и я не очень хорошо знаком с ним.Хотя у меня есть код (сейчас), так что я могу, по крайней мере, работать с ним :)

Я считаю, что код, который терпит неудачу, заключается в следующем:

    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 "из коробки".

Это было полезно?

Решение 2

Вот как я смог решить эту проблему:

  • строго подпишите пользовательскую сборку, о которой идет речь
  • измените файл 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>
    

Боковое примечание:вот отличный способ получить большой двоичный объект с открытым ключом вашей сборки VS трюк для получения токена открытого ключа и большого двоичного объекта подписанной сборки.

Другие советы

<system.web>

<trust level="Full"/>

</system.web>

попробуйте это в web.config

Запустите свою службу в режиме администратора

 <CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="FullTrust">

Для меня решением было изменить приведенную выше строку в rssrvpolicy.config От "None" Для "FullTrust".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top