Wie löse ich eine System.Security.SecurityException mit benutzerdefiniertem Code in SSRS auf?

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

Frage

Ich habe eine Assembly erstellt und in meinem Reporting Services-Bericht darauf verwiesen.Ich habe den Bericht lokal getestet (funktioniert) und ihn dann auf einen Berichtsserver hochgeladen (funktioniert nicht).

Hier ist der Fehler, der durch den von mir geschriebenen benutzerdefinierten Code ausgelöst wird.

System.Security.SecurityException:Anfrage für die Erlaubnis des Typs 'System.security.Permissions.securityPermission, MSCORLIB, Version = 2.0.0.0, Culture = neutral, publicKeyToken = B77A5C561934E089' fehlgeschlagen.bei System.Security.CodeAccesssecurityEngine .Assert () bei [NAMED -METHODE -NAME] AT ReportExprhostimpl.CustomCodeProxy.Fordern Sie die Art der ersten Erlaubnis, die fehlgeschlagen ist,:System.Security.Permissions.SecurityPermission Die fehlgeschlagene Zone der Versammlung war:Mein Computer

Dieses Projekt ist etwas, das ich geerbt habe, und ich bin damit nicht besonders vertraut.Obwohl ich den Code (jetzt) ​​habe, kann ich zumindest damit arbeiten :)

Ich glaube, der Code, der fehlschlägt, ist dieser:

    Dim fio As System.Security.Permissions.FileIOPermission = New System.Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
    fio.Assert()

Allerdings gibt es solche Sachen auch überall:

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

Ich kann mir vorstellen, dass beides Dinge sind, die Reporting Services nicht standardmäßig berücksichtigen würde.

War es hilfreich?

Lösung 2

So konnte ich das Problem lösen:

  • Signieren Sie die betreffende benutzerdefinierte Baugruppe unbedingt
  • Ändern Sie die Datei rssrvpolicy.config, um Berechtigungen für die Assembly hinzuzufügen

                        <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>
    

Randnotiz:Hier ist eine großartige Möglichkeit, den Public-Key-Blob Ihrer Assembly abzurufenVS-Trick zum Abrufen des öffentlichen Schlüsseltokens und des Blobs einer signierten Assembly.

Andere Tipps

<system.web>

<trust level="Full"/>

</system.web>

Versuchen Sie dies in web.config

Führen Sie Ihren Dienst im Administratormodus aus

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

Für mich bestand die Lösung darin, die obige Zeile in zu ändern rssrvpolicy.config aus "None" Zu "FullTrust".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top