Come posso risolvere un Sistema.Di sicurezza.SecurityException con codice personalizzato in SSRS?
-
09-06-2019 - |
Domanda
Ho creato un assieme e di riferimento nel mio report di Reporting Services.Ho testato il report in locale (opere), e poi ho caricato il report in un server (non funziona).
Qui è l'errore che viene generato dal codice personalizzato che ho scritto.
Sistema.Di sicurezza.SecurityException:Richiesta di autorizzazione di tipo 'Sistema.Di sicurezza.Le autorizzazioni.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' non è riuscito.a Sistema.Di sicurezza.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission la domanda, StackCrawlMark& stackMark, Int32 unrestrictedOverride, Int32 creare) a Sistema.Di sicurezza.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark& stackMark) a Sistema.Di sicurezza.CodeAccessPermission.Assert() a [Snipped Nome di Metodo] a ReportExprHostImpl.CustomCodeProxy.[Snipped Nome di Metodo] L'azione non riuscita era:Domanda Il tipo di prima l'autorizzazione non riuscita era:Sistema.Di sicurezza.Le autorizzazioni.SecurityPermission L'Orario dell'assemblea che non è riuscito stato:MyComputer
Questo progetto è una cosa che ho ereditato, e io non sono intimamente familiare con esso.Anche se io ho il codice (ora), così almeno posso lavorare :)
Credo che il codice di errore è questo:
Dim fio As System.Security.Permissions.FileIOPermission = New System.Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
fio.Assert()
Tuttavia, questo tipo di roba è ovunque anche:
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
Posso vedere una di queste cose che di Reporting Services non ospitare, fuori dalla scatola.
Soluzione 2
Questo è come sono stato in grado di risolvere il problema:
- fortemente firmare l'assembly personalizzato in questione
modificare il rssrvpolicy.file di configurazione per aggiungere autorizzazioni per il montaggio
<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>
Nota a margine:qui è un ottimo modo per ottenere la chiave pubblica blob della vostra assemblea VS trucco per ottenere il token di chiave pubblica e blob di un assembly firmato.
Altri suggerimenti
<system.web>
<trust level="Full"/>
</system.web>
provare questo nel web.config
Eseguire il servizio in modalità amministratore
<CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="FullTrust">
Per me, la soluzione è stata cambiare la riga precedente in rssrvpolicy.config
da "None"
per "FullTrust"
.