SSRSレポートカスタムコード内のAciveDirectoryGroupメンバーシップフォームを確認してください

realbart

SQL Server Reporting Services(SSRS)レポートを作成しています。レポートを表示するエンドユーザーは、特定の入力パラメーター(この場合は場所)を選択できます。ユーザーが選択できる場所はActiveDirectoryグループメンバーシップによって異なるため、カスタムレポート関数でグループメンバーシップをアサートしようとしています。

(レポートはOracleデータベースに接続する共通のデータソースを使用するため、グループメンバーシップをデータベースに委任することはできません)

概念実証レポート内に次のカスタムコードを記述しました。

Function CheckRight(name As String) As String
  Try
     Dim nameParts = name.Split("/")
     Dim user = name(1) + "@" + name(0)
     Dim inrole As Boolean = IsInGroup(user, "Domain Users")
     Return Iif(inrole, "Yes", "No")
  Catch ex As Exception
    Return ex.Message
  End Try
End Function

Function IsInGroup(user As String, group As String) As Boolean
  Dim identity AS System.Security.Principal.WindowsIdentity
  identity = New System.Security.Principal.WindowsIdentity(user)
  Dim principal = New System.Security.Principal.WindowsPrincipal(identity)
  Return principal.IsInRole(group)
End Function

次の式を使用して、レポートに結果を表示しています。

=Code.CheckRight(User!UserID)

「はい」または「いいえ」を表示する代わりに、エラーが表示されます。

タイプ 'System.Security.Permissions.SecurityPermission、mscorlib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089'のアクセス許可の要求が失敗しました。

(またはオランダ語: 'タイプSystem.Security.Permissions.SecurityPermission、mscorlib、バージョン= 4.0.0.0、カルチャー=ニュートラル、PublicKeyToken = b77a5c561934e089の許可要求が失敗しました。')

Visual Studio 2012を使用しているので、PrivateAssembliesはC:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PrivateAssembliesにあります。


回答

adriano-repettiの回答に基づく


PrivateAssemblies \ RSPreviewPolicy.configを編集し、ローカルで機能するようにしました。

<NamedPermissionSets>                       

  <!-- added this extra permission set at the bottom: -->

  <PermissionSet 
                 class="NamedPermissionSet"
                 version="1"
                 Name="PermissionSetForIsInRole"
                 Description="Permission set that grants rights to WindowsPrincipal.IsInRole.">
    <IPermission 
                 class="SecurityPermission"
                 version="1"
                 Flags="Execution,ControlPrincipal"/>
  </PermissionSet>  
</NamedPermissionSets>

<PolicyLevel>
  <Codegroup class="FirstMatchCodeGroup" ...>
    <CodeGroup 
        class="FirstMatchCodeGroup"
        version="1"
        PermissionSetName="Nothing">
      <IMembershipCondition 
          class="AllMembershipCondition"
          version="1"
      />
        <!-- changed 'Execution' to 'PermissionSetForIsInRole' here: -->
        <CodeGroup
            class="UnionCodeGroup"
            version="1"
            PermissionSetName="PermissionSetForIsInRole"
            Name="Report_Expressions_Default_Permissions"
            Description="This code group grants default permissions for code in report expressions and Code element. ">
          <IMembershipCondition
              class="StrongNameMembershipCondition"
              version="1" 
              PublicKeyBlob="0024000..."
          />
      </CodeGroup>
  </CodeGroup>
</PolicyLevel>

いくつかの注意事項


  • 権利を主張しようとしないでください。これにより、adriano-repettiの回答に記載されている理由により、「セキュリティ透過メソッドでCASアサーションを実行できません」という結果になります。
  • '実行'権限を変更することもおそらく可能でした。
  • https://msdn.microsoft.com/en-us/library/ms154466.aspx警告「外部アセンブリまたは保護されたリソースを呼び出すコードは、レポートで使用するためにカスタムアセンブリに組み込む必要があります。そうすることで、アクセス許可をより細かく制御できます。コードによって要求およびアサートされます。Code要素内のセキュアメソッドを呼び出さないでください。そうするには、レポート式ホストにFullTrustを付与し、すべてのカスタムコードにCLRへのフルアクセスを付与する必要があります。」
  • 可能なセキュリティフラグのリストは、https://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermissionflag(v = vs.110).aspxにあります。
  • RSPreviewPolicy.configは、ローカルでプレビューするために、ローカルでのみ使用されます。本番環境では、C:\ Program Files \ Microsoft SQL Server \ MSRS11.MSSQLSERVER \ Reporting Services \ ReportServer \ bin \ RSReportServerServices.exe.configを編集する必要があります。https://msdn.microsoft.com/en-us/library/bb630448.aspxによると-私はまだこれを行っていません。
アドリアーノレペッティ

WindowsPrincipal.IsInRole()メソッドにはSecurityPermissionFlag.ControlPrincipal権限が必要ですが、デフォルトではレポートのカスタムコードには付与されません。

名前付きのアクセス許可セットを含めるように構成を変更できます(この問題の詳細については、その記事も参照してください)。

<PermissionSet class="NamedPermissionSet"
  version="1"
  Name="PermissionSetForIsInRole"
  Description="Permission set that grants rights to WindowsPrincipal.IsInRole.">
    <IPermission class="SecurityPermission"
      version="1"
      Flags="Execution, ControlPrincipal"/>
</PermissionSet>

このパーミッションセットをright <CodeGroup>(あなたの場合Report_Expressions_Default_Permissions)およびright構成ファイルに関連付けることを忘れないでください

これは全体的なセキュリティに影響しますか?もちろんそうです。必要な権限と、それを必要とするレポートにのみ付与する必要があります。SSRSレポートのセキュリティが正しく構成されている場合、これは問題にはなりません。

2番目のバージョンについては、透過コード(SSRSで実行されるコード)がセキュリティに対して透過的であり、セキュリティを直接アサート/変更できないため、機能しません(ルールCA2140:透過コードはセキュリティの重要な項目を参照してはなりません)。

透明性は、アプリケーションの一部として実行されるコードをインフラストラクチャの一部として実行されるコードから分離する強制メカニズムです。透明性は、ネイティブコードの呼び出しなど、特権的なことを実行できるコード(重要なコード)と実行できないコード(透過コード)の間に障壁をもたらします。透過コードは、操作対象のアクセス許可セットの範囲内でコマンドを実行できますが、重要なコードを実行、派生、または含めることはできません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

データフレーム内の単語を確認してください

分類Dev

SSRS 2008:カスタムコードで配列が空であることを確認してください

分類Dev

カスタムフックのテスト:不変の違反:react-reduxコンテキスト値が見つかりませんでした。コンポーネントが<プロバイダー>でラップされていることを確認してください

分類Dev

多くのカスタムコンポーネントを使用して複雑なフォームを作成する方法を教えてください。

分類Dev

VSTS警告:テスト検出器とエグゼキューターが登録されており、プラットフォームとフレームワークのバージョン設定が適切であることを確認して、再試行してください

分類Dev

すべてのコントロールフォームを確認してください

分類Dev

SWI-Prolog:複数のリストの要素メンバーシップを確認してください

分類Dev

Firebase、Auth0、React。カスタムトークンの形式が正しくありません。ドキュメントを確認してください

分類Dev

ワークシートのフレーム内のコントロールを参照してください

分類Dev

C#WPF-システムタスクバーのアプリケーションアイコンを右クリックする場合は、アプリケーションを閉じる前にユーザーに確認してください

分類Dev

AndroidEspressoフレームワークでDatePickerカレンダーの値を確認してください

分類Dev

ブートストラップフォームに反応します。Formikで確認してください

分類Dev

Derivedの基本クラスのテンプレートパラメータを確認してください

分類Dev

レプリカセットのプライマリメンバーまたはセカンダリメンバーもホストするシステムでアービターを実行しないでください

分類Dev

RESTAPIを使用したソナーのプロジェクトのコードカバレッジを確認してください

分類Dev

Java-カスタムユーザー定義メソッドのソースコードを調べるためのコードです(プログラム内のコードを参照してください)

分類Dev

コレクションをブートストラップに送信できません-Laravelフォームで選択してください

分類Dev

pandasデータフレームの次のインデックス列の値と同じ値の連続した長さを確認してください

分類Dev

カスタムポートレットのフォームを使用して、コアLiferayのポートレット(ドキュメントライブラリ)のアクションを呼び出します

分類Dev

ジェネリックラムダパラメーターのタイプを確認してください

分類Dev

iOSシミュレータのタイプとバージョンを確認してください

分類Dev

ギャツビーとリーフレット: `LeafletMap`のrenderメソッドを確認してください

分類Dev

列タイプifステートメントを確認してください

分類Dev

ディスクイメージファイルシステムの種類を確認してください

分類Dev

サイドバーアイテムをクリックすると、いくつかの小道具を渡して、コアuireactjsのサイドバーメニューがコンポーネント内のいくつかのボタンを非表示または表示することを確認します

分類Dev

フォーム角度4.0html内のドロップダウンのデフォルトとして[選択してください]を選択します

分類Dev

エアフローでカスタムオペレーターを作成し、クラウドコンポーザー(Googleクラウドプラットフォーム)を介して実行されているエアフローテンプレートでそれらを使用する方法

分類Dev

フラグメントの画像アイテムメニューを確認してください

分類Dev

BS4を使用してスレッド(コメント)をスクレイプするには、フォーラムのリンクをたどってください

Related 関連記事

  1. 1

    データフレーム内の単語を確認してください

  2. 2

    SSRS 2008:カスタムコードで配列が空であることを確認してください

  3. 3

    カスタムフックのテスト:不変の違反:react-reduxコンテキスト値が見つかりませんでした。コンポーネントが<プロバイダー>でラップされていることを確認してください

  4. 4

    多くのカスタムコンポーネントを使用して複雑なフォームを作成する方法を教えてください。

  5. 5

    VSTS警告:テスト検出器とエグゼキューターが登録されており、プラットフォームとフレームワークのバージョン設定が適切であることを確認して、再試行してください

  6. 6

    すべてのコントロールフォームを確認してください

  7. 7

    SWI-Prolog:複数のリストの要素メンバーシップを確認してください

  8. 8

    Firebase、Auth0、React。カスタムトークンの形式が正しくありません。ドキュメントを確認してください

  9. 9

    ワークシートのフレーム内のコントロールを参照してください

  10. 10

    C#WPF-システムタスクバーのアプリケーションアイコンを右クリックする場合は、アプリケーションを閉じる前にユーザーに確認してください

  11. 11

    AndroidEspressoフレームワークでDatePickerカレンダーの値を確認してください

  12. 12

    ブートストラップフォームに反応します。Formikで確認してください

  13. 13

    Derivedの基本クラスのテンプレートパラメータを確認してください

  14. 14

    レプリカセットのプライマリメンバーまたはセカンダリメンバーもホストするシステムでアービターを実行しないでください

  15. 15

    RESTAPIを使用したソナーのプロジェクトのコードカバレッジを確認してください

  16. 16

    Java-カスタムユーザー定義メソッドのソースコードを調べるためのコードです(プログラム内のコードを参照してください)

  17. 17

    コレクションをブートストラップに送信できません-Laravelフォームで選択してください

  18. 18

    pandasデータフレームの次のインデックス列の値と同じ値の連続した長さを確認してください

  19. 19

    カスタムポートレットのフォームを使用して、コアLiferayのポートレット(ドキュメントライブラリ)のアクションを呼び出します

  20. 20

    ジェネリックラムダパラメーターのタイプを確認してください

  21. 21

    iOSシミュレータのタイプとバージョンを確認してください

  22. 22

    ギャツビーとリーフレット: `LeafletMap`のrenderメソッドを確認してください

  23. 23

    列タイプifステートメントを確認してください

  24. 24

    ディスクイメージファイルシステムの種類を確認してください

  25. 25

    サイドバーアイテムをクリックすると、いくつかの小道具を渡して、コアuireactjsのサイドバーメニューがコンポーネント内のいくつかのボタンを非表示または表示することを確認します

  26. 26

    フォーム角度4.0html内のドロップダウンのデフォルトとして[選択してください]を選択します

  27. 27

    エアフローでカスタムオペレーターを作成し、クラウドコンポーザー(Googleクラウドプラットフォーム)を介して実行されているエアフローテンプレートでそれらを使用する方法

  28. 28

    フラグメントの画像アイテムメニューを確認してください

  29. 29

    BS4を使用してスレッド(コメント)をスクレイプするには、フォーラムのリンクをたどってください

ホットタグ

アーカイブ