権限付与により、ユーザーはテーブル、タスク、リソースなどの MaxCompute オブジェクトに対する読み取り、書き込み、表示などの操作を実行できます。 ユーザーが追加された後、プロジェクト所有者またはプロジェクト管理者は、そのユーザーに権限付与する必要があります。 ユーザーは権限を取得した後、初めて操作を実行できます。
MaxCompute は、アクセス制御リスト (ACL) 権限付与、プロジェクト間のリソース共有、およびプロジェクトリソースの保護を提供します。権限付与には通常、サブジェクト、オブジェクト、操作という 3 つの要素が含まれています。 MaxCompute では、サブジェクトはユーザーまたはロールを指し、オブジェクトはプロジェクト内のさまざまなタイプのオブジェクトを指します。
ACL 権限付与には、プロジェクト、テーブル、関数、リソースおよびインスタンスという 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;
create function function_name as 'com.aliyun.odps.compiler.udf.PlaybackJsonShrinkUdf' using 'test_project_b/resources/odps-compiler-playback.jar' -f;.