Comment puis-je résoudre un Système.De sécurité.SecurityException du code personnalisé dans SSRS?

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

Question

J'ai créé une assemblée et qu'il mentionne dans mon rapport Reporting Services.J'ai testé localement le rapport (travaux), et j'ai ensuite téléchargé le rapport à un serveur de rapports (ne fonctionne pas).

Voici l'erreur qui est générée par le code personnalisé que j'ai écrit.

Système.De sécurité.SecurityException:Demande de l'autorisation de type 'Système.De sécurité.Les autorisations.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' a échoué.au Système.De sécurité.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission la demande, StackCrawlMark& stackMark, Int32 unrestrictedOverride, Int32 créer) à Système.De sécurité.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark& stackMark) à Système.De sécurité.CodeAccessPermission.Assert() à [Ciselée Nom de la Méthode] à ReportExprHostImpl.CustomCodeProxy.[Ciselée Nom de la Méthode] L'action qui a échoué était:Demande le type de La première l'autorisation qui a échoué était:Système.De sécurité.Les autorisations.SecurityPermission La Zone de l'assemblée qui a échoué a:Poste de travail

Ce projet est quelque chose que j'ai hérité, et je ne suis pas intimement familier avec elle.Bien que je ne avoir le code (maintenant), donc je peux au moins travailler avec elle :)

Je crois que le code défaut est présent:

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

Cependant, ce genre de choses est partout trop:

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

Je peux voir des choses que Reporting Services ne serait pas accueillir la sortie de la boîte.

Était-ce utile?

La solution 2

C'est ainsi que j'ai pu résoudre le problème:

  • fortement signer l'assembly personnalisé en question
  • modifier la rssrvpolicy.fichier de configuration pour ajouter des autorisations pour l'assemblée

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

Note de côté:voici un excellent moyen pour obtenir la clé publique goutte de votre assemblée VS astuce pour obtenir le jeton de clé publique et d'objets blob de la signature de l'assemblée.

Autres conseils

<system.web>

<trust level="Full"/>

</system.web>

essayez ceci dans le web.config

Exécutez votre service en mode administrateur

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

Pour moi, la solution a été de changer la ligne ci-dessus dans le rssrvpolicy.config à partir de "None" pour "FullTrust".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top