MaxCompute では、ビューを作成することで行レベルのアクセス制御を実装できます。このトピックでは、具体的な実装方法を実例を交えて説明します。
背景情報
MaxCompute には、多数のユーザーのルール定義に適した行レベルのアクセス制御機能が導入されています。この方法では、個々のユーザーごとに共有オブジェクトを作成する必要がなくなり、そのようなオブジェクトの冗長なストレージを回避できます。ただし、この方法では、元のテーブルに基づいてより複雑なクエリプランが生成される可能性があり、特定の制限があります。詳細については、「行レベルのアクセス制御」をご参照ください。
独自のフィルタリングルールを持つ異なるユーザーに対して行レベルのアクセス制御を実装する必要がある場合は、ビューまたはテーブルを作成し、それに応じて共有することで実現できます。この方法は、事前にフィルタリングされたデータに基づく計算をサポートし、より簡単で直感的な操作を提供します。
シナリオ
この例では、プロジェクト A の table_order テーブルは、すべての加盟店の注文取引情報テーブルです。このテーブルには、すべての加盟店がアクセスできます。ただし、各加盟店は、自分の店舗の注文取引情報のみを表示できます。
ソリューション
table_order テーブルには、加盟店 ID(sellerid)が含まれています。データは、加盟店 ID に基づいてフィルタリングできます。各加盟店が自分のデータのみを読み取れるようにするには、行レベルのアクセス制御が必要です。行レベルの権限制御を実行するには、次のいずれかの方法を使用できます。
方法 1:table_order テーブルに基づいて加盟店ごとに個別のビューを作成し、ビューに対する権限を関連する加盟店に付与します。この方法をお勧めします。この方法では、行レベルの権限制御の要件を満たすことができます。
方法 2:table_order テーブルに基づいて加盟店ごとに個別のテーブルを作成し、テーブルに対する権限を関連する加盟店に付与します。この方法では、行レベルのアクセス制御の要件を満たすことができます。ただし、この方法では、データが繰り返し保存されます。さらに、データの整合性を確保するために、テーブルが table_order テーブルでリアルタイムに更新されていることを確認する必要があります。
手順
MaxCompute クライアントでビューを作成して行レベルの権限制御を実行する場合は、次の手順を実行します。
Alibaba Cloud アカウントを使用して MaxCompute クライアントにログオンします。詳細については、「MaxCompute クライアントのインストールと起動」をご参照ください。
プロジェクト A で指定された加盟店のビューを作成します。ステートメントの例:
create view <view_name> as select * from table_order WHERE sellerid='xxxx';ビューの作成方法の詳細については、「ビュー関連の操作」をご参照ください。
プロジェクト A にパッケージを作成し、パッケージを使用してビューに対する権限を加盟店に付与します。ステートメントの例:
-- パッケージを作成します。 create package <package_name>; -- 作成したビューをパッケージに追加します。 add table <view_name> to package <package_name>; -- パッケージを使用してリソースを加盟店と共有します。 allow project <project_name> to install package <package_name>;パッケージを使用したリソースの共有方法の詳細については、「パッケージに基づくクロスプロジェクト リソース アクセス」をご参照ください。
加盟店の MaxCompute プロジェクトにパッケージをインストールし、ビューを使用するために必要な権限を加盟店に付与します。ステートメントの例:
-- 加盟店のプロジェクトにパッケージをインストールします。 install package <Project A>.<package_name>; -- パッケージに対する読み取り権限を加盟店に付与します。 grant read on package <Project A>.<package_name> to user <user_name>;
この例では、パッケージを使用してビューの権限を付与する方法を示しています。MaxCompute プロジェクトの所有者は、次のステートメントを直接実行して、ビューに対する SELECT 権限と DESCRIBE 権限をユーザーに付与することもできます。ビジネス要件に基づいて方法を選択できます。
grant select,describe on table <view_name> to user <user_name>;