権限付与により、ユーザーはテーブル、タスク、リソースなどの MaxCompute オブジェクトに対する読み取り、書き込み、表示などの操作を実行できます。 ユーザーが追加された後、プロジェクト所有者またはプロジェクト管理者は、そのユーザーに権限付与する必要があります。 ユーザーは権限を取得した後、初めて操作を実行できます。

MaxCompute は、アクセス制御リスト (ACL) 権限付与、プロジェクト間のリソース共有、およびプロジェクトリソースの保護を提供します。権限付与には通常、サブジェクト、オブジェクト、操作という 3 つの要素が含まれています。 MaxCompute では、サブジェクトはユーザーまたはロールを指し、オブジェクトはプロジェクト内のさまざまなタイプのオブジェクトを指します。

ACL 権限付与には、プロジェクトテーブル関数リソースおよびインスタンスという MaxCompute オブジェクトが含まれます。 操作は特定のオブジェクトタイプに関連しているため、オブジェクトのタイプによって、さまざまなタイプの操作をサポートします。

MaxCompute プロジェクトは、以下のオブジェクトタイプと操作をサポートしています。
オブジェクト 操作 説明
プロジェクト Read 作成時間などのプロジェクト情報 (プロジェクトオブジェクトを除く) を表示します。
プロジェクト Write コメントなどのプロジェクト情報 (プロジェクトオブジェクトを除く) を更新します。
プロジェクト List プロジェクト内のすべてのオブジェクトタイプの一覧を表示します。
プロジェクト CreateTable プロジェクトにテーブルを作成します。
Project CreateInstance プロジェクトにインスタンスを作成します。
プロジェクト CreateFunction プロジェクトに関数を作成します。
プロジェクト CreateResource プロジェクトにリソースを作成します。
プロジェクト All 前述のすべての権限を付与します。
テーブル Describe テーブルのメタデータを読み取ります。
テーブル Select テーブルデータを読み取ります。
テーブル Alter テーブルのメタデータを変更し、パーティションを追加または削除します。
テーブル Update テーブルデータを上書きまたは追加します。
テーブル Drop テーブルを削除します。
テーブル All 前述のすべての権限を付与します。
関数 Read 権限を読み取り、実行します。
関数 Write 更新します。
関数 Delete 削除します。
関数 Run 実行します。
関数 All 前述のすべての権限を付与します。
リソース Read 読み取ります。
リソース Write 更新します。
リソース Delete 削除します。
リソース All 前述のすべての権限を付与します。
インスタンス Read 読み取ります。
インスタンス Write 更新します。
インスタンス All 前述のすべての権限を付与します。
  • プロジェクトタイプのオブジェクトに対する CreateTable 操作は、プロジェクトオブジェクトに対する CreateInstance 権限と共に使用する必要があります。 テーブルタイプのオブジェクトに対する Select、Alter、Update、Drop 操作は、プロジェクトオブジェクトに対する CreateInstance 権限と共に使用する必要があります。
  • CreateInstance 権限が付与されていないと、前述の権限が付与されていても、対応する操作を実行できません。 これは、MaxCompute の内部実装に関連しています。 テーブルタイプのオブジェクトに対する Select 権限は、CreateInstance 権限と共に使用する必要があります。 プロジェクト A でプロジェクト B のテーブルを選択するなど、プロジェクトをまたぐ操作を実行している間は、プロジェクト A の CreateInstance とプロジェクト B の Table select 権限を持っている必要があります。
  • ユーザーまたはロールを追加した後、そのユーザーやロールに権限を付与する必要があります。MaxCompute 権限付与は、オブジェクトベースの権限付与方法です。 ACL によって権限付与された権限データは、オブジェクトのサブリソースの一種と見なされます。権限付与は、オブジェクトが存在する場合にのみ実行できます。 オブジェクトが削除されると、権限付与されたデータは自動的に削除されます。
  • SQL92 権限付与
    MaxCompute は、SQL92 で規定された GRANT コマンドと REVOKE コマンドと同様の構文を使用して、権限付与をサポートしています。 単純な権限付与文を使用して、既存のプロジェクトオブジェクトに対する権限を付与または取り消します。 権限付与の構文は次のとおりです。
        grant actions on object to subject
        revoke actions on object from subject
        actions ::= action_item1, action_item2, ...
        object ::= project project_name | table schema_name |
                   instance inst_name | function func_name |
                    resource res_name
        subject ::= user full_username | role role_name
    SQL92 で規定された GRANT コマンドと REVOKE コマンド、または Oracle データベースのセキュリティ管理に精通しているユーザーは、MaxCompute の ACL 権限付与構文が [WITH GRANT OPTION] パラメーターをサポートしていないことに気づいているかもしれません。 たとえば、ユーザー A がユーザー B にオブジェクトへのアクセス権限を付与した場合、ユーザー B はユーザー C に権限を付与できません。このシナリオでは、次の 3 つのロールのいずれかによって、すべての権限が付与されます。
    • プロジェクト所有者
    • プロジェクト管理者
    • オブジェクト作成者
  • ACL 権限付与の使用例

    次のシナリオでは、Alibaba Cloud アカウントユーザー alice@aliyun.com はプロジェクト test_project_a に新しく追加されたメンバー、Allen は bob@aliyun.com に追加された RAM サブアカウントです。 test_project_a では、どちらのユーザーもジョブの送信、テーブルの作成、プロジェクト内の既存オブジェクトの表示を行う必要があります。

    プロジェクト管理者 Bob は、以下の権限付与操作を実行します。
        use test_project_a;
        add user aliyun$alice@aliyun.com;
        add user ram$bob@aliyun.com:Allen; 
        create role worker;
        grant worker TO aliyun$alice@aliyun.com; 
        grant worker TO ram$bob@aliyun.com:Allen; 
        grant CreateInstance, CreateResource, CreateFunction, CreateTable, List ON PROJECT test_project_a TO ROLE worker; 
  • プロジェクト間でのテーブル/リソース/関数の共有

    前述の例に従って、aliyun$alice@aliyun.com と ram$bob@aliyun.com: Allen は test_project_a に特定の権限を持っています。 この2人のユーザーは、test_project_b のテーブル prj_b_test_table を照会し、test_project_b. UDF prj_b_test_udf. を使用する必要があります。

    プロジェクト管理者は、test_project_b に対して以下の権限付与操作を実行します。
        use test_project_b; --Open the project
        add user aliyun$alice@aliyun.com; --Add the user
        add user ram$bob@aliyun.com:Allen; --Add th RAM sub-account
        create role prj_a_worker; --Create a role
        grant prj_a_worker TO aliyun$alice@aliyun.com; --Grant the role
        grant prj_a_worker TO ram$bob@aliyun.com:Alice; --Grant the role
        grant Describe , Select ON TABLE prj_b_test_table TO ROLE prj_a_worker; --Authorize the role
        grant Read ON Function prj_b_test_udf TO ROLE prj_a_worker; --Authorize the role
        grant Read ON Resource prj_b_test_udf_resource TO ROLE prj_a_worker; --Authorize the role
    --After authorization, the two users query table and use udf in test_project_a as follows:
    use test_project_a;
    select test_project_b:prj_b_test_udf(arg0, arg1) as res from test_project_b.prj_b_test_table;
UDF が test_project_a に作成されている場合は、リソース権限付与のみが必要です。 次のコードを使用します。
create function function_name as 'com.aliyun.odps.compiler.udf.PlaybackJsonShrinkUdf' using 'test_project_b/resources/odps-compiler-playback.jar' -f;.