すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:ACL アクセスコントロール

最終更新日:Aug 22, 2026

複数のユーザーでプロジェクトやテーブルなどの MaxCompute オブジェクトを操作する必要がある場合は、アクセスコントロールリスト (ACL) を使用して、特定の権限をユーザーやロールに付与できます。複数ユーザーの権限を効率的に管理するには、ロールに権限を付与し、そのロールをユーザーに割り当てます。本トピックでは、MaxCompute がサポートする ACL 権限付与コマンドについて説明し、例を示します。

背景情報

ACL ベースのアクセスコントロールでは、許可リスト方式の権限モデルを使用します。これにより、ユーザーまたはロールが特定のオブジェクトに対して特定のアクションを実行することを明示的に許可します。このため、権限付与がシンプルかつ正確になります。

MaxCompute プロジェクトを作成すると、ACL ベースのアクセスコントロールがデフォルトで有効になります。プロジェクト所有者は、プロジェクトで set CheckPermissionUsingACL=true|false; コマンドを実行して、この機能を有効または無効にできます。

ACL ベースのアクセスコントロールは、次のシナリオに適用されます。

シナリオ

説明

権限付与者

エントリポイント

ユーザーへの権限付与

特定のオブジェクトに対する 1 つ以上のアクションを単一のユーザーに直接付与します。

権限リストの「サポートされる権限付与者」列をご参照ください。

ロールによるユーザーへの権限付与

特定のオブジェクトに対する 1 つ以上のアクションをロールに直接付与し、そのロールを複数のユーザーに割り当てます。ユーザーはロールの権限を継承します。

ロールの作成とユーザーへのロールの割り当て方法の詳細については、「ロール計画」および「ユーザーへのロールのアタッチ」をご参照ください。

説明

ロールは、効率的なユーザー管理のために設計されています。同じオブジェクトに対する同じ権限を複数のロールに付与することは避けてください。

前提条件

ACL ベースのアクセスコントロールを使用する前に、次の情報を確認してください。

  • 被付与者のアカウント名またはロール名。ユーザーまたはロールは MaxCompute プロジェクトに追加されている必要があります。アカウントの形式は次のとおりです。Alibaba Cloud アカウントは ALIYUN$<account_id> の形式、RAM ユーザーアカウントは RAM$<account_id>:<RAM user UID> の形式、RAM ロールは RAM$<account_id>:role/<RAM role name> の形式です。

    MaxCompute クライアントで list users; または list roles; コマンドを実行して、アカウント名またはロール名を取得できます。

    ユーザーまたはロールを追加するには、「ユーザー計画と管理」または「ロール計画」をご参照ください。

  • オブジェクトタイプ、オブジェクト名、付与するアクション。

    オブジェクトタイプとアクションの詳細については、「MaxCompute の権限」をご参照ください。

制限事項

ACL ベースのアクセスコントロールには、次の制限が適用されます。

  • 権限は、既存のユーザーまたはロールに対し、既存のオブジェクトにのみ付与できます。これにより、同じ名前のオブジェクトを削除して再作成することによるセキュリティリスクを回避できます。

  • ACL ベースのアクセスコントロールは、[with grant option] 句を使用した権限付与をサポートしていません。たとえば、ユーザー A がユーザー B にオブジェクトへのアクセスを許可した場合、ユーザー B はその権限をユーザー C に付与することはできません。

  • ACL 権限付与は許可リストモデルを使用し、拒否リストモデルはサポートしていません。

注意事項

ACL ベースのアクセスコントロールを使用する際は、次の点にご注意ください。

  • オブジェクトを削除すると、MaxCompute はそのオブジェクトに関連付けられているすべての ACL 権限を自動的に取り消します。

  • ユーザーを削除しても、権限は保持されます。その後、ユーザーをプロジェクトに再度追加すると、以前の権限が自動的に復元されます。ユーザーの権限を完全にクリアするには、「削除されたユーザーの残存権限をクリアする」をご参照ください。

構文

ACL ベースのアクセスコントロールコマンドは、次の構文を使用します。

  • ACL 権限の付与

    grant <actions> on <object_type> <object_name> 
    [(<column_list>)] to <subject_type> <subject_name> 
    [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
  • ACL 権限の取り消し

    revoke <actions> on <object_type> <object_name> 
    [(<column_list>)] from <subject_type> <subject_name>;
  • 列レベルのアクセスコントロール

    grant <actions> on table <table_name> (<column_list>) to <subject_type> <subject_name>;
    revoke <actions> on table <table_name> (<column_list>) from <subject_type> <subject_name>;

次の表に、パラメーターを示します。

パラメーター

必須

説明

actions

はい

付与するアクション。1 つの grant ステートメントで 1 つ以上のアクションを指定できます。

複数のアクションはコンマ (,) で区切ります。有効なアクションのリストについては、「MaxCompute の権限」をご参照ください。

object_type

はい

権限を付与するオブジェクトのタイプ。1 つのステートメントで指定できるオブジェクトタイプは 1 つだけです。

有効なオブジェクトタイプのリストについては、「MaxCompute の権限」をご参照ください。

object_name

はい

オブジェクトの名前。名前は次の方法で見つけられます。

  • プロジェクト名:MaxCompute コンソールにログインします。左上隅でリージョンを切り替えた後、プロジェクト管理 タブでプロジェクト名を見つけられます。オブジェクトタイプが project の場合、現在のプロジェクトに関する情報のみを照会できます。

  • テーブル名:MaxCompute クライアントで show tables; を実行して、テーブル名またはビュー名を取得します。

  • モデル名:MaxCompute クライアントで show models; を実行して、モデル名を取得します。

  • リソース名:MaxCompute クライアントで list resources; を実行して、リソース名を取得します。

  • 関数名:MaxCompute クライアントで list functions; を実行して、関数名を取得します。

  • インスタンス名:MaxCompute クライアントで show instances; を実行して、インスタンス ID を取得します。

オブジェクト名には、アスタリスク (*) をワイルドカードとして使用できます。たとえば、table taobao* は、名前が taobao で始まるすべてのテーブルを示します。

説明

ワイルドカード (*) は、ROLE に権限を付与する場合にのみ使用できます。USER に権限を付与する場合、ワイルドカードはサポートされていません。

column_list

いいえ

このパラメーターは、object_type が table で、列レベルのアクセス制御を実装する場合にのみ必須です。 1 つ以上の列を指定できます。 複数の列名はコンマ (,) で区切ります。

説明

このパラメーターは、指定された列に対する Describe、Select、Alter、Update、Drop、ShowHistory、および ALL 権限を制御します。列に機密度レベルが設定されている場合は、ラベルベースのアクセスコントロールを使用して、機密ラベルに基づいて機密データへのアクセスを制御できます。

privilegeproperties

conditions

いいえ

リクエスト元やアクセス方法などの属性に基づいて権限を制御します。形式は "<var_name> <Operation> Constant" and "<var_name> <Operation> Constant" and ... です。サポートされている var_name と Operation の値については、「条件」をご参照ください。

days

いいえ

権限が失効するまでの日数。このパラメーターを指定しない場合、権限は失効しません。このパラメーターを指定すると、MaxCompute は失効後に権限レコードを自動的に削除します。

subject_type

はい

被付与者のタイプ。有効な値:

  • USER: Alibaba Cloud アカウントまたは RAM ユーザー。

  • ロール:ロールです。

subject_name

はい

被付与者のユーザーアカウントまたはロール名。1 回の付与につき、1 人のユーザーまたは 1 つのロールのみを指定できます。形式:

  • Alibaba Cloud アカウント:ALIYUN$<account_id>。

  • RAM ユーザー: RAM$<account_id>:<RAM user UID>。

  • RAM ロール:RAM$<account_id>:role/<RAM role name>。

MaxCompute クライアントで list users; または list roles; コマンドを実行して、ユーザーアカウントまたはロール名を取得できます。

条件

次の表に、conditions でサポートされている var_name と Operation の値を示します。

var_name

タイプ

Operation

説明

acs:UserAgent

STRING

  • StringEquals: =

  • StringNotEquals: <>

  • StringLike: like

  • StringNotLike: not like

リクエスト元クライアントの User-Agent。

acs:Referer

STRING

リクエストの HTTP Referer。

acs:SourceIp

IP アドレス

  • IpAddress: in (...)

  • NotIpAddress: not in (...)

リクエスト元クライアントの IP アドレス。

acs:SecureTransport

BOOLEAN

  • True

  • False

リクエストが HTTPS などのセキュアなチャネル経由で送信されたかどうかを示します。

acs:CurrentTime

DATEANDTIME

  • DateEquals: =

  • DateNotEquals: <>

  • DateLessThan: <

  • DateLessThanEquals: <=

  • DateGreaterThan: >

  • DateGreaterThanEquals: >=

Web サーバーがリクエストを受信した時刻。ISO 8601 形式、たとえば 2012-11-11T23:59:59Z です。

例

Bob@aliyun.com (アカウント ID: 5527xxxxxxxx5788) が test_project_a のプロジェクト所有者であり、Allen (UID: 1652xxxxxxxxxx1538)、Alice (UID: 2763xxxxxxxxxx1649)、Tom (UID: 3874xxxxxxxxxx1850) が Bob@aliyun.com の RAM ユーザーであると仮定します。以下の例は、MaxCompute クライアントを使用した権限付与操作を示しています。

  • 例 1:ユーザーへの権限付与

    test_project_a プロジェクトに sale_detail テーブルを作成し、ユーザー Allen にテーブルの Describe (メタデータの読み取り) と Select (データの読み取り) 権限を付与します。以下にサンプルコマンドを示します。

    -- Bob が test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- sale_detail という名前のパーティションテーブルを作成します。
    create table if not exists sale_detail
    (
    shop_name     string,
    customer_id   string,
    total_price   double
    )
    partitioned by (sale_date string, region string);
    -- ユーザー Allen をプロジェクトメンバーとして追加します。
    add user RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538;
    -- Allen に権限を付与します。
    grant Describe, Select on table sale_detail to USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538;
    -- Allen に付与された権限を表示します。
    show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; 
    -- 権限付与の結果は次のとおりです。
    Authorization Type: ACL
    [user/RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538]
    A       projects/test_project_a/tables/sale_detail: Describe | Select
  • 例 2:ユーザーへの列レベルの権限付与

    例 1 で作成した sale_detail テーブルを使用して、ユーザー Alice に sale_detail テーブルの shop_name 列と customer_id 列のすべての権限を付与します。以下にサンプルコマンドを示します。

    -- Bob が test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- ユーザー Alice をプロジェクトメンバーとして追加します。
    add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649;
    -- Alice に列レベルの権限を付与します。
    grant All on table sale_detail (shop_name, customer_id) to USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649;
    -- Alice に付与された権限を表示します。
    show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; 
    -- 権限付与の結果は次のとおりです。
    Authorization Type: ACL
    [user/RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649]
    A       projects/test_project_a/tables/sale_detail/customer_id: All
    A       projects/test_project_a/tables/sale_detail/shop_name: All
  • 例 3:ユーザーからの権限の取り消し

    例 1 と例 2 に基づいて、ユーザー Allen と Alice から権限を取り消します。以下にサンプルコマンドを示します。

    -- Bob が test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- Allen から権限を取り消します。
    revoke Describe, Select on table sale_detail from USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538;
    -- Alice から権限を取り消します。
    revoke All on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649;
    -- 取り消し後の Allen の権限を確認します。 Describe と Select 権限が権限リストから削除されます。
    show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; 
    -- 取り消し後の Alice の権限を確認します。 All 権限が権限リストから削除されます。
    show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; 
  • 例 4:ロールを使用して複数のユーザーに同じ権限を付与する

    Alice、Tom、および別の Alibaba Cloud アカウント Lily@aliyun.com (アカウント ID: 5638xxxxxxxx6899) に、インスタンス、リソース、関数、およびテーブルを作成し、test_project_a プロジェクト内のすべてのオブジェクトタイプを一覧表示する権限を付与します。以下にサンプルコマンドを示します。

    -- Bob が test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- ユーザー Alice、Tom、および Lily@aliyun.com をプロジェクトメンバーとして追加します。
    add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649;
    add user RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850;
    add user ALIYUN$5638xxxxxxxx6899;
    -- Worker ロールを作成します。
    create role Worker; 
    -- ユーザーに Worker ロールを割り当てます。
    grant Worker TO RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; 
    grant Worker TO RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; 
    grant Worker TO ALIYUN$5638xxxxxxxx6899; 
    -- Worker ロールに、インスタンス、リソース、関数、テーブルを作成し、test_project_a プロジェクト内のすべてのオブジェクトタイプを一覧表示する権限を付与します。
    grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker;
    -- ユーザー Lily の権限を表示します。
    show grants for ALIYUN$5638xxxxxxxx6899; 
    -- 次の権限付与結果は、ユーザー Lily が指定された権限を持っていることを示します。
    [roles]
    worker
    
    Authorization Type: ACL
    [role/worker]
    A       projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List
  • 例 5:複数のユーザーから同じロールベースの権限を取り消す

    例 4 に基づいて、ユーザー Alice、Tom、および Lily@aliyun.com から権限を取り消します。以下にサンプルコマンドを示します。

    -- Bob が test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- ユーザー Alice、Tom、および Lily@aliyun.com から Worker ロールを取り消します。
    revoke Worker from RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649;
    revoke Worker from RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850;
    revoke Worker from ALIYUN$5638xxxxxxxx6899;
    -- 取り消し後の Lily の権限を確認します。権限リストに Worker ロールは含まれなくなります。
    show grants for ALIYUN$5638xxxxxxxx6899; 

次のステップ