SSRS のカスタム コードを使用して System.Security.SecurityException を解決するにはどうすればよいですか?

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

質問

アセンブリを作成し、Reporting Services レポートで参照しました。レポートをローカルでテストし (動作します)、その後レポート サーバーにレポートをアップロードしました (動作しません)。

これは、私が作成したカスタム コードによってスローされるエラーです。

System.Security.SecurityException:タイプの許可の要求 'System.Security.Permissions.SecurityPermission、 mscorlib、バージョン = 2.0.0.0、 Culture=neutral、 PublicKeyToken=b77a5c561934e089' 失敗 しました。で System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken、CodeAccessPermission demand、StackCrawlMark&stackMark、 Int32 unrestrictedOverride、Int32 create) を System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark& stackMark) を System.Security.CodeAccessPermission.Assert() (英語) at [切り取られたメソッド名] at ReportExprHostImpl.CustomCodeProxy です。[切り取られたメソッド名]失敗したアクションは次のとおりです。Demand 最初の 失敗した権限は次のとおりです。System.Security.Permissions.SecurityPermission (英語) 失敗したアセンブリのゾーン は:ぼくのコンピュータ

このプロジェクトは私が引き継いだものであり、私はそれについて詳しくはありません。ただし、コードは(現在)持っているので、少なくともそれを使用して作業できます:)

失敗しているコードは次のとおりだと思います。

    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>
    

サイドノート:これは、アセンブリの公開キー BLOB を取得する優れた方法です署名付きアセンブリの公開キートークンと BLOB を取得するための 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