トップ回答者
SQL Server 2008 MDX でのアクセス制御について

質問
-
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)
回答
-
なるほど。
セキュリティの設定ですね。
(私は、実装でキューブへの細かいセキュリティを
張ったことがないもので... ^^;)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
すべての返信
-
やりたいことが、いまいち判らないのですが、、、
補足のクエリで全ユーザーのリストが取れているかと思います。
このクエリの結果を絞り込みたいのでしょうか?*** 絞り込む方法 ***
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 -
ご回答ありがとうございます。
質問の内容が分かりにくくてすみません。やりたい事は、
ディメンション対して、セキュリティをかける場合に固定値
では設定出来ますが、それを動的(【UserName】関数を使用して)
にログインしたユーザーを取得して、設定しようと試みていますが
うまくいきません。
例)ログインユーザーが「ABC_USER」の場合
【組織階層】
[事業部]
→[本部]
→[部]
→[USER ID]【固定の場合】
ディメンションにセキュリティを設定する場合は、
ロール→ディメンションデータ→詳細設定→許可されたメンバセットに対して
MDXにて以下を指定します。
以下設定により、ディメンションがABC_USERのメジャーの情報だけが表示されます。
-----------
{[組織階層].[階層].[USER ID].&[ABC_USER]}
-----------それを、動的にログインユーザー取得して
設定したいと思い、【UserName】関数を使用して以下でやってみたのですが、
うまく制御ができません。
-----------
{[組織階層].[階層].[USER ID].&[UserName]}
-----------またまた、分かりにくいかもしれませんが、よろしくお願いします。
-
なるほど。
セキュリティの設定ですね。
(私は、実装でキューブへの細かいセキュリティを
張ったことがないもので... ^^;)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
-
本当にありがとうございます。
ありがとうございます。↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
-----------
STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
-----------
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑MDX式にて、動的取得に成功しましたぁぁぁぁぁ。
本当にありがとうございます。
MDXをもっと勉強する必要ありそうです。また分からない事があったら、質問させて頂きます。
本当にありがとうございました。- 回答としてマーク s_kurihara 2011年1月27日 16:27
- 回答としてマークされていない s_kurihara 2011年1月28日 1:54
-
たびたびすみません。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
-----------
STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
-----------
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
上記のMDXによる動的ディメンション制御を、
キューブが開かれた、もしくは呼び出された
時に実行したいのですが・・・アクション設定がうまくいきません。【対象になる種類】
→[階層メンバ]
【対象になるオブジェクト】
→[組織階層].[階層]
【条件】
→省略
【アクションの種類】
→データセット
【アクション式】
→STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
【呼び出し】
→インタラクティブあとはデフォルトです。
どのような設定にすれば、正しく制御できるのでしょうか?
-
ご回答ありがとうございます。
ご指摘のロールでの設定を実施したことはあるですが、
動的な情報を取得するように設定はできるのですが、
設定を完了した際に、静的に変換されてしまい・・・・
結局、固定で指定したロール設定と同様となってしまいます。【設定操作中】
--------------------------------------------------
STRTOSET("[組織階層].[階層].[USER ID].&["+UserName+"]")
---------------------------------------------------
↓
【設定後】例)自分がABCというユーザーの場合
--------------------------------------------------
[組織階層].[階層].[USER ID].&[ABC]
---------------------------------------------------ですので、キューブをユーザーが開いた時等に
アクセス制御を実施しようとこころみております。