次の方法で共有


多次元モデル アセンブリの管理

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Microsoft SQL Server SQL Server Analysis Services には、多次元式 (MDX) 言語とデータ マイニング拡張機能 (DMX) 言語で使用するための組み込み関数が多数用意されています。これは、標準的な統計計算から階層内のメンバーの走査まで、すべてを実現するように設計されています。 しかし、他の複雑で堅牢な製品と同様に、このような製品の機能をさらに拡張する必要があります。

そのため、SQL Server Analysis Services を使用すると、SQL Server Analysis Services インスタンスまたはデータベースにアセンブリを追加できます。 アセンブリを使用すると、Microsoft Visual Basic .NET や Microsoft Visual C# などの共通言語ランタイム (CLR) 言語を使用して、外部のユーザー定義関数を作成できます。 Microsoft Visual Basic や Microsoft Visual C++ などのコンポーネント オブジェクト モデル (COM) オートメーション言語を使用することもできます。

Important

COM アセンブリは、セキュリティ 上のリスクを引き起こす可能性があります。 このリスクとその他の考慮事項により、COM アセンブリは SQL Server 2008 Analysis Services (SSAS) で非推奨になりました。 COM アセンブリは、今後のリリースではサポートされない可能性があります。

アセンブリを使用すると、MDX と DMX のビジネス機能を拡張できます。 ダイナミック リンク ライブラリ (DLL) などのライブラリに必要な機能を構築し、ライブラリをアセンブリとして SQL Server Analysis Services のインスタンスまたは SQL Server Analysis Services データベースに追加します。 ライブラリ内のパブリック メソッドは、ユーザー定義関数として MDX および DMX 式、プロシージャ、計算、アクション、クライアント アプリケーションに公開されます。

新しいプロシージャと関数を含むアセンブリをサーバーに追加できます。 アセンブリを使用して、サーバーによって提供されないカスタム機能を強化または追加できます。 アセンブリを使用すると、多次元式 (MDX)、データ マイニング拡張機能 (DMX)、またはストアド プロシージャに新しい関数を追加できます。 アセンブリは、カスタム アプリケーションが実行されている場所から読み込まれ、アセンブリ バイナリ ファイルのコピーがサーバー内のデータベース データと共に保存されます。 アセンブリが削除されると、コピーされたアセンブリもサーバーから削除されます。

アセンブリには、COM と CLR の 2 種類があります。 CLR アセンブリは、C#、Visual Basic .NET、マネージド C++ などの .NET Framework プログラミング言語で開発されたアセンブリです。 COM アセンブリは、サーバーに登録する必要がある COM ライブラリです

アセンブリは、 Server または Database オブジェクトに追加できます。 サーバー アセンブリは、サーバーに接続されている任意のユーザーまたはサーバー内の任意のオブジェクトによって呼び出すことができます。 データベース アセンブリは、 Database オブジェクトまたはデータベースに接続されているユーザーのみが呼び出すことができます。

単純な Assembly オブジェクトは、基本情報 (名前と ID)、ファイルコレクション、およびセキュリティ仕様で構成されます。

デバッグ ファイルがアセンブリ ファイルと共に読み込まれた場合、ファイル コレクションは、読み込まれたアセンブリ ファイルとそれに対応するデバッグ (.pdb) ファイルを参照します。 アセンブリ ファイルは、アプリケーションがファイルを定義した場所から読み込まれ、コピーがデータと共にサーバーに保存されます。 アセンブリ ファイルのコピーは、サービスが開始されるたびにアセンブリを読み込むのに使用されます。

セキュリティ仕様には、アクセス許可セットと、アセンブリの実行に使用される偽装が含まれます。

ユーザー定義関数の呼び出し

アセンブリ内のユーザー定義関数の呼び出しは、組み込み関数の呼び出しと同様に実行されます。ただし、完全修飾名を使用する必要があります。 たとえば、次の例に示すように、MDX で予期される型を返すユーザー定義関数が MDX クエリに含まれます。

Select MyAssembly.MyClass.MyStoredProcedure(a, b, c) on 0 from Sales  

ユーザー定義関数は、CALL キーワードを使用して呼び出すこともできます。 レコードセットまたは void 値を返すユーザー定義関数には CALL キーワードを使用する必要があり、ユーザー定義関数が現在のキューブやデータ マイニング モデルなどの MDX または DMX ステートメントまたはスクリプトのコンテキストでオブジェクトに依存している場合は、CALL キーワードを使用できません。 MDX または DMX クエリの外部で呼び出される関数の一般的な用途は、AMO オブジェクト モデルを使用して管理機能を実行することです。 たとえば、MDX ステートメントで関数 MyVoidProcedure(a, b, c) を使用する場合は、次の構文が使用されます。

Call MyAssembly.MyClass.MyVoidProcedure(a, b, c)  

アセンブリは、共通コードを 1 回開発し、1 つの場所に格納できるようにすることで、データベース開発を簡略化します。 クライアント ソフトウェア開発者は、SQL Server Analysis Services 用の関数のライブラリを作成し、それらをアプリケーションと共に配布できます。

アセンブリとユーザー定義関数は、SQL Server Analysis Services 関数ライブラリまたは他のアセンブリの関数名を複製できます。 完全修飾名を使用してユーザー定義関数を呼び出す限り、SQL Server Analysis Services は正しいプロシージャを使用します。 セキュリティ上の理由から、また別のクラス ライブラリで重複する名前を呼び出す可能性を排除するために、SQL Server Analysis Services ではストアド プロシージャに完全修飾名のみを使用する必要があります。

特定の CLR アセンブリからユーザー定義関数を呼び出すには、次に示すように、ユーザー定義関数の前にアセンブリ名、完全なクラス名、プロシージャ名が付きます。

AssemblyNameFullClassNameProcedureName(Argument1, Argument2, ...)

以前のバージョンの SQL Server Analysis Services との下位互換性のために、次の構文も許容されます。

AssemblyName!FullClassName!ProcedureName(Argument1, Argument2, ...)

COM ライブラリで複数のインターフェイスがサポートされている場合は、次に示すように、インターフェイス ID を使用してプロシージャ名を解決することもできます。

AssemblyName!InterfaceID!ProcedureName(Argument1, Argument2, ...)

セキュリティ

アセンブリのセキュリティは、コード アクセス セキュリティ モデルである .NET Framework セキュリティ モデルに基づいています。 .NET Framework では、ランタイムが完全に信頼されたコードと部分的に信頼されたコードの両方をホストできることを前提とするコード アクセス セキュリティ メカニズムがサポートされています。 .NET Framework コード アクセス セキュリティによって保護されているリソースは、通常、リソースへのアクセスを有効にする前に対応するアクセス許可を要求するマネージド コードによってラップされます。 アクセス許可の要求は、呼び出し履歴内のすべての呼び出し元 (アセンブリ レベル) に対応するリソース アクセス許可がある場合にのみ満たされます。

アセンブリの場合、実行のアクセス許可は Assembly オブジェクトの PermissionSet プロパティを使用して渡されます。 マネージド コードが受け取るアクセス許可は、有効なセキュリティ ポリシーによって決まります。 SQL Server Analysis Services 以外のホスト環境では、エンタープライズ、コンピューター、ユーザーの 3 つのレベルのポリシーが既に有効です。 コードが受け取るアクセス許可の有効な一覧は、これら 3 つのレベルによって取得されたアクセス許可の積集合によって決まります。

SQL Server Analysis Services は、ホスト中に CLR にホスト レベルのセキュリティ ポリシー レベルを提供します。このポリシーは、常に有効な 3 つのポリシー レベルより下の追加のポリシー レベルです。 このポリシーは、SQL Server Analysis Services によって作成されるすべてのアプリケーション ドメインに対して設定されます。

SQL Server Analysis Services のホスト レベル ポリシーは、システム アセンブリの SQL Server Analysis Services 固定ポリシーと、ユーザー アセンブリのユーザー指定ポリシーの組み合わせです。 SQL Server Analysis Services ホスト ポリシーのユーザー指定の部分は、アセンブリの所有者に基づいて、各アセンブリに対して次の 3 つのアクセス許可バケットのいずれかを指定します。

アクセス許可の設定 Description
安全 内部計算アクセス許可を提供します。 このアクセス許可バケットでは、.NET Framework 内の保護されたリソースにアクセスするためのアクセス許可は割り当てません。 PermissionSet プロパティで何も指定されていない場合、これはアセンブリの既定の アクセス許可 バケットです。
ExternalAccess [安全] 設定と同じアクセスを提供し、外部システム リソースにアクセスする追加の機能を提供します。 このアクセス許可バケットはセキュリティの保証を提供しません (ただし、このシナリオをセキュリティで保護することはできますが)、信頼性が保証されます。
Unsafe 制限はありません。 このアクセス許可セットで実行されているマネージド コードに対してセキュリティや信頼性を保証することはできません。 管理者が含むカスタム アクセス許可であっても、すべてのアクセス許可は、このレベルの信頼で実行されているコードに付与されます。

CLR が SQL Server Analysis Services によってホストされている場合、スタック ウォーク ベースのアクセス許可チェックは、ネイティブ SQL Server Analysis Services コードとの境界で停止します。 SQL Server Analysis Services アセンブリ内のマネージド コードは、常に前述の 3 つのアクセス許可カテゴリのいずれかに分類されます。

COM (またはアンマネージ) アセンブリ ルーチンは、CLR セキュリティ モデルをサポートしていません。

ものまね

マネージド コードが SQL Server Analysis Services の外部にあるリソースにアクセスするたびに、SQL Server Analysis Services はアセンブリの ImpersonationMode プロパティ設定に関連付けられている規則に従って、適切な Windows セキュリティ コンテキストでアクセスが行われるようにします。 安全なアクセス許可設定を使用するアセンブリは SQL Server Analysis Services の外部のリソースにアクセスできないため、これらの規則は ExternalAccess および Unsafe アクセス許可設定を使用するアセンブリにのみ適用されます。

  • 現在の実行コンテキストが Windows 認証ログインに対応し、元の呼び出し元のコンテキストと同じ場合 (つまり、中央に EXECUTE AS がない場合)、SQL Server Analysis Services は、リソースにアクセスする前に Windows 認証済みログインを偽装します。

  • 元の呼び出し元からコンテキストを変更した中間 EXECUTE AS がある場合、外部リソースへのアクセスは失敗します。

ImpersonationMode プロパティは、ImpersonateCurrentUser または ImpersonateAnonymous に設定できます。 既定の設定 ImpersonateCurrentUser は、現在のユーザーのネットワーク ログイン アカウントでアセンブリを実行します。 ImpersonateAnonymous 設定が使用されている場合、実行コンテキストは、サーバー上の Windows ログイン ユーザー アカウントIUSER_servername に対応します。 これは、サーバーに対する特権が制限されているインターネット ゲスト アカウントです。 このコンテキストで実行されているアセンブリは、ローカル サーバー上の制限付きリソースにのみアクセスできます。

アプリケーション ドメイン

SQL Server Analysis Services は、アプリケーション ドメインを直接公開しません。 同じアプリケーション ドメインで実行されているアセンブリのセットのため、アプリケーション ドメインは、実行時に .NET Framework の System.Reflection 名前空間を使用して、またはその他の方法で互いを検出し、遅延バインディング方式で呼び出すことができます。 このような呼び出しは、SQL Server Analysis Services の承認ベースのセキュリティで使用されるアクセス許可チェックの対象となります。

アプリケーション ドメインの境界と各ドメインに入るアセンブリは実装によって定義されるため、同じアプリケーション ドメイン内のアセンブリを検索する必要はありません。

こちらもご覧ください

ストアド プロシージャのセキュリティの設定
ストアド プロシージャの定義