none
SQL Server 2008 MDX でのアクセス制御について RRS feed

  • 質問

  • SQL Server 2008 にてキューブ開発をしています。
    Analysis Service のディメンションにて、
    ログインユーザーでのアクセス制御をしたく、
    MDXの記述にて、ユーザー情報を取得して設定したいので
    ですが、うまくできません。

    以下のディメンション属性に対して、ログインユーザー情報と
    一致しているかで制御したいのですが・・・

    --------------
    [○○ディメンション].[階層].[USER ID].&[UserName]
    --------------

    【補足】
    MicroSoft Visual Studioにて、
    以下のMDXではログインユーザーが取得できています。

    WITH MEMBER Measures.x AS UserName
    SELECT Measures.x ON COLUMNS
    FROM [○○キューブ]


    • 移動 山本春海 2011年1月27日 4:31 適切な (移動元:SQL Server)
    2011年1月26日 13:19

回答

  • なるほど。
    セキュリティの設定ですね。
    (私は、実装でキューブへの細かいセキュリティを
       張ったことがないもので... ^^;)

    UserName関数は文字列を返すという仕様なので、
    そのままでは「MDX文」の一部としては使えません。
    STRTOSET関数を使って文字列をセットに変換するのが良いかと思います。

    -----------
    STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
    -----------


    ---------------------------------
    Infospire Kayano
    • 回答としてマーク 山本春海 2011年1月28日 1:23
    • 回答としてマークされていない s_kurihara 2011年1月28日 2:03
    • 回答の候補に設定 IS Kayano 2011年1月28日 4:33
    • 回答としてマーク 山本春海 2011年2月25日 0:33
    2011年1月27日 12:04

すべての返信

  • やりたいことが、いまいち判らないのですが、、、

    補足のクエリで全ユーザーのリストが取れているかと思います。
    このクエリの結果を絞り込みたいのでしょうか?

    *** 絞り込む方法 ***

    WITH MEMBER Measures.x AS UserName
    SELECT Measures.x ON COLUMNS
    FROM [○○キューブ]
    ↓↓↓
    WITH MEMBER Measures.x AS UserName
    SELECT Measures.x ON COLUMNS
    ,[○○ディメンション].[階層].[USER ID].&[UserName] ON ROWS
    FROM [○○キューブ]

    として、行を絞り込みます。

    **************

    MDXは直接書くと非常に難易度の高い言語です。
    ReportBuilderのデータセットダイアログなどで、
    大まかに作って編集するなど工夫をされるといいかもしれません。


    ---------------------------------
    Infospire Kayano
    2011年1月27日 9:38
  • ご回答ありがとうございます。
    質問の内容が分かりにくくてすみません。

    やりたい事は、
    ディメンション対して、セキュリティをかける場合に固定値
    では設定出来ますが、それを動的(【UserName】関数を使用して)
    にログインしたユーザーを取得して、設定しようと試みていますが
    うまくいきません。


    例)ログインユーザーが「ABC_USER」の場合


    【組織階層】
     [事業部]
      →[本部]
        →[部]
         →[USER ID]

    【固定の場合】
    ディメンションにセキュリティを設定する場合は、
    ロール→ディメンションデータ→詳細設定→許可されたメンバセットに対して
    MDXにて以下を指定します。
    以下設定により、ディメンションがABC_USERのメジャーの情報だけが表示されます。
    -----------
    {[組織階層].[階層].[USER ID].&[ABC_USER]}
    -----------

    それを、動的にログインユーザー取得して
    設定したいと思い、【UserName】関数を使用して以下でやってみたのですが、
    うまく制御ができません。
    -----------
    {[組織階層].[階層].[USER ID].&[UserName]}
    -----------

    またまた、分かりにくいかもしれませんが、よろしくお願いします。

    2011年1月27日 10:19
  • なるほど。
    セキュリティの設定ですね。
    (私は、実装でキューブへの細かいセキュリティを
       張ったことがないもので... ^^;)

    UserName関数は文字列を返すという仕様なので、
    そのままでは「MDX文」の一部としては使えません。
    STRTOSET関数を使って文字列をセットに変換するのが良いかと思います。

    -----------
    STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
    -----------


    ---------------------------------
    Infospire Kayano
    • 回答としてマーク 山本春海 2011年1月28日 1:23
    • 回答としてマークされていない s_kurihara 2011年1月28日 2:03
    • 回答の候補に設定 IS Kayano 2011年1月28日 4:33
    • 回答としてマーク 山本春海 2011年2月25日 0:33
    2011年1月27日 12:04
  • 本当にありがとうございます。
    ありがとうございます。

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    -----------
    STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
    -----------
    ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    MDX式にて、動的取得に成功しましたぁぁぁぁぁ。
    本当にありがとうございます。
    MDXをもっと勉強する必要ありそうです。

    また分からない事があったら、質問させて頂きます。
    本当にありがとうございました。

    • 回答としてマーク s_kurihara 2011年1月27日 16:27
    • 回答としてマークされていない s_kurihara 2011年1月28日 1:54
    2011年1月27日 12:31

  • たびたびすみません。


    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    -----------
    STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
    -----------
    ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


    上記のMDXによる動的ディメンション制御を、
    キューブが開かれた、もしくは呼び出された
    時に実行したいのですが・・・アクション設定がうまくいきません。

    【対象になる種類】
     →[階層メンバ]
    【対象になるオブジェクト】
     →[組織階層].[階層]
    【条件】
     →省略
    【アクションの種類】
     →データセット
    【アクション式】
     →STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
    【呼び出し】
     →インタラクティブ

    あとはデフォルトです。

    どのような設定にすれば、正しく制御できるのでしょうか?

    2011年1月28日 2:00
  • やりたいことは、アクセスの制御ですよね。
    であれば、「アクション」ではないと思いますよ。
    (アクションも特定用途以外で実装したことないですが ^^;)

    設定しようとされていた

    「ロール→ディメンションデータ→詳細設定→許可されたメンバセット」

    では駄目なのでしょうか?


    ---------------------------------
    Infospire Kayano
    2011年1月28日 4:33
  • ご回答ありがとうございます。


    ご指摘のロールでの設定を実施したことはあるですが、
    動的な情報を取得するように設定はできるのですが、
    設定を完了した際に、静的に変換されてしまい・・・・
    結局、固定で指定したロール設定と同様となってしまいます。

    【設定操作中】
    --------------------------------------------------
    STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
    ---------------------------------------------------
       ↓
    【設定後】例)自分がABCというユーザーの場合
    --------------------------------------------------
    [組織階層].[階層].[USER ID].&[ABC]
    ---------------------------------------------------

    ですので、キューブをユーザーが開いた時等に
    アクセス制御を実施しようとこころみております。

     

    2011年1月28日 4:53