Wie löse ich eine System.Security.SecurityException mit benutzerdefiniertem Code in SSRS auf?
-
09-06-2019 - |
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.
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"
.