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

MaxCompute:GRANT

最終更新日:Aug 22, 2026

MaxCompute では、アクセス制御リスト (ACL) またはポリシーベースの権限付与を使用して、オブジェクトに対してアクションを実行する権限をユーザーまたはロールに付与できます。

ACLベースのアクセス制御

  • 前提条件

    ACLベースのアクセス制御を使用する前に、以下の情報が揃っていることを確認してください。

    • 権限を付与するアカウントまたはロールの名前。アカウントまたはロールは MaxCompute プロジェクトに追加されている必要があります。Alibaba Cloud アカウントの形式は ALIYUN$<Alibaba Cloud アカウント> で、RAM ユーザーの形式は RAM$<Alibaba Cloud account to which the RAM user belongs>:<RAM user name> です。

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

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

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

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

  • 制限事項

    ACLベースのアクセス制御には、以下の制限があります。

    • 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>")];
    • 列レベルのアクセス制御

      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 つのステートメントで 1 つ以上のアクションを指定できます。

      複数のアクションを指定する場合は、コンマ (,) で区切ります。サポートされているアクションのリストについては、「MaxCompute の権限」をご参照ください。

      object_type

      はい

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

      サポートされているオブジェクトタイプのリストについては、「MaxCompute の権限」をご参照ください。

      object_name

      はい

      権限を付与するオブジェクトの名前を指定します。名前は以下のいずれかの方法で取得できます。

      • プロジェクト名:MaxCompute コンソールにログインし、左上のコーナーでリージョンを切り替えてから、プロジェクト管理 タブに移動して特定の MaxCompute プロジェクト名を確認してください。

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

      • リソース名: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 ユーザー

      • ROLE:ロール

      subject_name

      はい

      権限を付与するユーザーまたはロールの名前を指定します。ステートメントごとに指定できるユーザーまたはロールは 1 つだけです。

      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 リファラー。

    acs:SourceIp

    IP Address

    • 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。

  • 例

    Alibaba Cloud アカウント Bob@aliyun.com が test_project_a のプロジェクト所有者であり、Allen、Alice、Tom が Bob@aliyun.com に属する RAM ユーザーであるとします。

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

      test_project_a プロジェクトに sale_detail という名前のテーブルを作成し、そのテーブルに対する Describe (メタデータの読み取り) と Select (データの読み取り) の権限をユーザー Allen に付与します。コマンド例:

      --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);
      --RAM ユーザーAllenをプロジェクトメンバーとして追加します。
      add user RAM$Bob@aliyun.com:Allen;
      --Allenに権限を付与します。
      grant Describe, Select on table sale_detail to USER RAM$Bob@aliyun.com:Allen;
      --Allenに付与された権限を表示します。
      show grants for RAM$Bob@aliyun.com:Allen; 
      --次の結果が返されます。
      Authorization Type: ACL
      [user/RAM$Bob@aliyun.com:Allen]
      A       projects/test_project_a/tables/sale_detail: Describe | Select
    • 例2:ユーザーへの列レベルの権限の付与

      例 1 で作成した sale_detail テーブルに基づいて、shop_name 列と customer_id 列に対するすべての権限を Alice に付与します。コマンド例:

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --RAM ユーザーAliceをプロジェクトメンバーとして追加します。
      add user RAM$Bob@aliyun.com:Alice;
      --Aliceに列レベルの権限を付与します。
      grant All on table sale_detail (shop_name, customer_id) to USER RAM$Bob@aliyun.com:Alice;
      --Aliceに付与された権限を表示します。
      show grants for RAM$Bob@aliyun.com:Alice; 
      --次の結果が返されます。
      Authorization Type: ACL
      [user/RAM$Bob@aliyun.com:Alice]
      A       projects/test_project_a/tables/sale_detail/customer_id: All
      A       projects/test_project_a/tables/sale_detail/shop_name: All
    • 例3:ロールを使用して複数のユーザーに同じ権限を付与

      test_project_a プロジェクトでインスタンス、リソース、関数、テーブルを作成し、すべてのオブジェクトタイプを一覧表示する権限を、RAM ユーザーの Alice と Tom、および Alibaba Cloud アカウントの Lily@aliyun.com に付与します。コマンド例:

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --ユーザーAlice、Tom、およびLily@aliyun.comをプロジェクトメンバーとして追加します。
      add user RAM$Bob@aliyun.com:Alice;
      add user RAM$Bob@aliyun.com:Tom;
      add user ALIYUN$Lily@aliyun.com;
      --Workerという名前のロールを作成します。
      create role Worker; 
      --Workerロールをユーザーに割り当てます。
      grant Worker TO RAM$Bob@aliyun.com:Alice; 
      grant Worker TO RAM$Bob@aliyun.com:Tom; 
      grant Worker TO ALIYUN$Lily@aliyun.com; 
      --test_project_aプロジェクトに対するCreateInstance、CreateResource、CreateFunction、CreateTable、およびList権限をWorkerロールに付与します。
      grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker;
      --ユーザーLilyに付与された権限を表示します。
      show grants for ALIYUN$Lily@aliyun.com; 
      --次の結果が返されます。この結果は、ユーザーLilyに権限が付与されたことを示しています。
      [roles]
      worker
      
      Authorization Type: ACL
      [role/worker]
      A       projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List

ポリシーベースのアクセス制御

  • 前提条件

    ポリシーベースのアクセス制御を使用するには、以下の情報が必要です。

    • 権限が付与されるロールの名前。そのロールは MaxCompute プロジェクトにすでに存在している必要があります。

      MaxCompute クライアントで list roles; コマンドを実行して、既存のロールを表示します。

      新しいロールを追加するには、「ロールの計画」をご参照ください。

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

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

  • 制限事項

    ポリシーベースのアクセス制御は、既存のロールへの権限付与のみをサポートします。

  • 注意事項

    ポリシーベースのアクセス制御を使用する場合:

    • 許可リストと拒否リストの両方が設定されている場合、拒否リストが優先されます。

    • ポリシーベースのアクセス制御では、存在しないオブジェクトに権限を付与できます。オブジェクトが削除されても、関連するポリシー権限は削除されません。これにより、その後同じ名前のオブジェクトを再作成した場合にセキュリティリスクが生じる可能性があります。

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

  • 構文

    ポリシーベースのアクセス制御では、以下の構文を使用します。

    grant <actions> on <object_type> <object_name> 
    to ROLE <role_name> 
    privilegeproperties("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>" ,"expires"="<days>"]);
  • パラメーター

    パラメーター

    必須

    説明

    actions

    はい

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

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

    object_type

    はい

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

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

    object_name

    はい

    オブジェクトの名前。名前は以下の方法で取得できます。

    • プロジェクト名:MaxCompute コンソールにログインし、左上のコーナーでリージョンを切り替えてから、プロジェクト管理 タブで MaxCompute プロジェクト名を確認してください。

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

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

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

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

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

    説明

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

    role_name

    はい

    権限が付与されるロールの名前。ステートメントごとに指定できるロールは 1 つだけです。

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

    privilegeproperties

    policy

    はい

    true に設定する必要があります。これにより、ポリシーベースのアクセス制御が有効になります。

    allow

    はい

    権限付与のメカニズムを指定します。有効な値:

    • true:指定されたオブジェクトに対する指定されたアクションを許可します。

    • false:指定されたオブジェクトに対する指定されたアクションを拒否します。これは拒否リストとして機能します。

    conditions

    いいえ

    リクエスト元やアクセス方法などの条件に基づいて権限を制御します。有効なパラメーター値のリストについては、「条件」をご参照ください。

    days

    いいえ

    権限の有効期間 (日数)。このパラメーターが指定されていない場合、権限は期限切れになりません。指定された場合、MaxCompute は有効期限が切れると自動的に権限を取り消します。

  • 例

    Alibaba Cloud アカウント Bob@aliyun.com が test_project_a プロジェクトのプロジェクト所有者であり、Allen と Tom が Bob@aliyun.com に属する RAM ユーザーであるとします。Allen は test_project_a プロジェクトの Admin ロールを持っています。

    • 例1:ロールに基づいてユーザーに権限を付与する (拒否リスト)

      RAM ユーザー Tom が、名前が tb_ で始まるテーブルを削除する権限を拒否します。コマンド例:

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --Workerという名前のロールを作成します。
      create role Worker; 
      --RAM ユーザーTomをプロジェクトメンバーとして追加します。
      add user RAM$Bob@aliyun.com:Tom;
      --RAM ユーザーTomにWorkerロールを割り当てます。
      grant Worker TO RAM$Bob@aliyun.com:Tom; 
      --test_project_aプロジェクト内で名前がtb_で始まるテーブルを削除する権限をWorkerロールに拒否します。
      grant Drop on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="false");
      --RAM ユーザーTomに付与された権限を表示します。
      show grants for RAM$Bob@aliyun.com:Tom; 
      --次の結果が返されます。DはDeny (拒否) を示します。名前がtb_で始まるテーブルを削除する権限は拒否されます。
      Authorization Type: Policy
      [role/worker]
      D      projects/test_project_a/tables/tb_*: Drop
    • 例2:ポリシーベースの権限を取り消す (拒否リスト)

      例 1 に基づいて、ユーザー Tom から権限を取り消します。

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --RAM ユーザーTomからWorkerロールを取り消します。
      revoke Worker from RAM$Bob@aliyun.com:Tom;
      --RAM ユーザーTomの権限を表示します。Drop権限は権限リストに表示されなくなります。
      show grants for RAM$Bob@aliyun.com:Tom; 
    • 例3:ロールに基づいてユーザーに権限を付与する (許可リスト)

      RAM ユーザー Tom が、名前が tb_ で始まるテーブルのデータを更新できるようにします。コマンド例:

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --Workerという名前のロールを作成します。
      create role Worker; 
      --RAM ユーザーTomをプロジェクトメンバーとして追加します。
      add user RAM$Bob@aliyun.com:Tom;
      --RAM ユーザーTomにWorkerロールを割り当てます。
      grant Worker TO RAM$Bob@aliyun.com:Tom; 
      --test_project_aプロジェクト内で名前がtb_で始まるテーブルのデータを更新する権限をWorkerロールに許可します。
      grant Update on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
      --RAM ユーザーTomに付与された権限を表示します。
      show grants for RAM$Bob@aliyun.com:Tom; 
      --次の結果が返されます。AはAllow (許可) を示します。名前がtb_で始まるテーブルのデータを更新する権限が付与されます。
      Authorization Type: Policy
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Update
    • 例4:ポリシーベースの権限を取り消す (許可リスト)

      例 3 に基づいて、ユーザー Tom から権限を取り消します。

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --RAM ユーザーTomからWorkerロールを取り消します。
      revoke Worker from RAM$Bob@aliyun.com:Tom;
      --RAM ユーザーTomの権限を表示します。Update権限は権限リストに表示されなくなります。
      show grants for RAM$Bob@aliyun.com:Tom; 
    • 例5:組み込みロールを持つユーザーにきめ細かい権限を付与する

      RAM ユーザー Allen が test_project_a プロジェクト内の任意のテーブルを削除する権限を拒否します。コマンド例:

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --Workerという名前のロールを作成します。
      create role Worker; 
      --RAM ユーザーAllenにWorkerロールを割り当てます。
      grant Worker TO RAM$Bob@aliyun.com:Allen; 
      --test_project_aプロジェクト内の任意のテーブルを削除する権限をWorkerロールに拒否します。
      grant Drop on table * to ROLE Worker privilegeproperties("policy" = "true", "allow"="false");
      --RAM ユーザーAllenに付与された権限を表示します。
      show grants for RAM$Bob@aliyun.com:Allen; 
      --次の結果が返されます。任意のテーブルの削除が拒否されます。
      [roles]
      role_project_admin, worker
      
      Authorization Type: Policy
      [role/role_project_admin]
      A       projects/test_project_a: *
      A       projects/test_project_a/instances/*: *
      A       projects/test_project_a/jobs/*: *
      A       projects/test_project_a/offlinemodels/*: *
      A       projects/test_project_a/packages/*: *
      A       projects/test_project_a/registration/functions/*: *
      A       projects/test_project_a/resources/*: *
      A       projects/test_project_a/tables/*: *
      A       projects/test_project_a/volumes/*: *
      
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Update
      D       projects/test_project_a/tables/*: Drop
      
      Authorization Type: ObjectCreator
      AG      projects/test_project_a/tables/local_test: All
      AG      projects/test_project_a/tables/mr_multiinout_out1: All
      AG      projects/test_project_a/tables/mr_multiinout_out2: All
      AG      projects/test_project_a/tables/ramtest: All
      AG      projects/test_project_a/tables/wc_in: All
      AG      projects/test_project_a/tables/wc_in1: All
      AG      projects/test_project_a/tables/wc_in2: All
      AG      projects/test_project_a/tables/wc_out: All
    • 例6:組み込みロールを持つユーザーから権限を取り消す

      例 5 に基づいて、ユーザー Allen から権限を取り消します。コマンド例:

      --test_project_aプロジェクトに切り替えます。
      use test_project_a; 
      --RAM ユーザーAllenからWorkerロールを取り消します。
      revoke Worker from RAM$Bob@aliyun.com:Allen;
      --RAM ユーザーAllenの権限を表示します。Drop権限は権限リストに表示されなくなります。
      show grants for RAM$Bob@aliyun.com:Allen; 

ユーザーへのロールの付与

ユーザーにロールを付与すると、そのユーザーはそのロールに割り当てられているすべての権限を取得します。

  • 制限事項

    ユーザーにロールを付与する前に、まずプロジェクト内のオブジェクトに対する必要な権限をロールに付与する必要があります。詳細については、「ロールまたはユーザーへの権限の付与」をご参照ください。

  • 構文

    grant <role_name> to <user_name>;
  • パラメーター

    • role_name:必須。付与するロールの名前。

    • user_name:必須。ロールが付与される Alibaba Cloud アカウントまたは RAM ユーザー。Alibaba Cloud アカウントの形式は ALIYUN$****@aliyun.com で、RAM ユーザーの形式は RAM$**** です。

  • 例

    -- Alibaba Cloud アカウント test_user@aliyun.com に player ロールを付与します。
    grant player to ALIYUN$test_user@aliyun.com;

パッケージアクセスの付与

パッケージがインストールされている MaxCompute プロジェクト内のパッケージへのアクセス権をユーザーまたはロールに付与します。

インストールされたパッケージは、MaxCompute 内の独立したオブジェクトタイプです。パッケージ内のリソースにアクセスするには、そのパッケージに対する Read 権限が必要です。プロジェクト所有者または Super_Administrator もしくは Admin ロールを持つユーザーは、ACLベースのアクセス制御を使用してこの権限を付与できます。

  • 構文

    grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;
  • 利用上の注意

    権限を付与した後、ユーザーまたはロールは、パッケージがインストールされているプロジェクト内でのみパッケージ内のリソースにアクセスできます。パッケージの権限をきめ細かく管理するには、「パッケージの権限制御」をご参照ください。

  • パラメーター

    パラメーター

    必須

    説明

    actions

    はい

    パッケージ内のリソースに対して実行するアクション。このパラメーターは Read に設定する必要があります。

    project_name

    はい

    パッケージがインストールされている MaxCompute プロジェクトの名前。

    プロジェクト名を確認するには、MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択して、プロジェクト管理 タブに移動してください。

    package_name

    はい

    パッケージの名前。

    作成したすべてのパッケージを一覧表示するには、MaxCompute クライアントで show packages; を実行してください。

    name

    はい

    権限が付与されるユーザーまたはロール。一度に指定できるユーザーまたはロールは 1 つだけです。

    ユーザーまたはロールの名前を取得するには、MaxCompute クライアントで list users; または list roles; コマンドを実行してください。

  • 例

    Bella が Alibaba Cloud アカウント Amy@aliyun.com に属する RAM ユーザーであるとします。次の例は、Bella にパッケージへのアクセス権を付与する方法を示しています。

    -- Bella にパッケージへのアクセスを許可します。
    grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;

関連コマンド

  • CREATE PACKAGE:パッケージを作成します。

  • CREATE ROLE:MaxCompute プロジェクトにロールを作成します。

  • REVOKE:ユーザーまたはロールからパッケージへのアクセス権を取り消します。