MaxCompute プロジェクトで複数のユーザーに同じ権限を付与したい場合、ロールを作成し、そのロールに権限を付与してから、ユーザーにロールをアタッチすることができます。これにより、ユーザーはロールの権限を継承します。このトピックでは、プロジェクトレベルのロール権限付与の構文について説明し、例を示します。
ロール権限付与のシナリオ
MaxCompute は、次の表で説明するロール権限付与のシナリオをサポートしています。ロールに権限を付与した後、ユーザーにロールをアタッチできます。ユーザーが権限を必要としなくなった場合は、ユーザーからロールをデタッチできます。
ロール権限付与シナリオ | 権限付与方法 | 権限付与者 | 権限付与エントリ |
| 詳細については、「権限」トピックの「サポートされている承認者」列をご参照ください。 | ||
オブジェクトに対する操作権限をロールに付与する
プロジェクト、テーブル、モデル、リソース、関数、またはインスタンスに対する操作権限をロールに付与できます。
コマンドフォーマット
プロジェクト に対する操作権限をロールに付与する
ACL 権限付与
GRANT Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All ON project <project_name> TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; /* プロジェクト <project_name> に対する Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All 権限をロール <role_name> に付与します。[privilegeproperties("conditions" = "<conditions>", "expires"="<days>")] はオプションです。*/ACL 構文を使用したポリシー承認
GRANT Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All ON project <project_name> TO ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]); /* プロジェクト <project_name> に対する Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All 権限をロール <role_name> に付与します。[, "conditions"= "<conditions>", "expires"="<days>"] はオプションです。*/
テーブルに対する操作権限をロールに付与する
ACL 権限付与
GRANT Describe|Select|Alter|Update|Drop|ShowHistory|All ON TABLE <table_name> [(<column_list>)] /* テーブル <table_name> に対する Describe|Select|Alter|Update|Drop|ShowHistory|All 権限をロール <role_name> に付与します。[(<column_list>)] と [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")] はオプションです。*/ TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];ACL 構文を使用したポリシー承認
GRANT Describe|Select|Alter|Update|Drop|ShowHistory|All ON TABLE <table_name> [(<column_list>)] TO ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]); /* テーブル <table_name> に対する Describe|Select|Alter|Update|Drop|ShowHistory|All 権限をロール <role_name> に付与します。[(<column_list>)] と [, "conditions"= "<conditions>", "expires"="<days>"] はオプションです。*/
モデルに対する操作権限をロールに付与する
ACL 権限付与
GRANT Describe|Execute|Alter|Drop|All ON MODEL <model_name> TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];ACL 構文を使用したポリシー承認
GRANT Describe|Execute|Alter|Drop|All ON MODEL <model_name> TO ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
リソースに対する操作権限をロールに付与する
ACL 権限付与
GRANT Read|Write|Delete|All ON resource <resource_name> TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; /* リソース <resource_name> に対する Read|Write|Delete|All 権限をロール <role_name> に付与します。[privilegeproperties("conditions" = "<conditions>", "expires"="<days>")] はオプションです。*/ACL 構文を使用したポリシー承認
GRANT Read|Write|Delete|All ON resource <resource_name> TO ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]); /* リソース <resource_name> に対する Read|Write|Delete|All 権限をロール <role_name> に付与します。[, "conditions"= "<conditions>", "expires"="<days>"] はオプションです。*/
関数に対する操作権限をロールに付与する
ACL 権限付与
GRANT Read|Write|Delete|Execute|All ON FUNCTION <function_name> TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; /* 関数 <function_name> に対する Read|Write|Delete|Execute|All 権限をロール <role_name> に付与します。[privilegeproperties("conditions" = "<conditions>", "expires"="<days>")] はオプションです。*/ACL 構文を使用したポリシー承認
GRANT Read|Write|Delete|Execute|All ON FUNCTION <function_name> TO ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]); /* 関数 <function_name> に対する Read|Write|Delete|Execute|All 権限をロール <role_name> に付与します。[, "conditions"= "<conditions>", "expires"="<days>"] はオプションです。*/
インスタンスに対する操作権限をロールに付与する
ACL 権限付与
GRANT Read|Write|All ON instance <instance_id> TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; /* インスタンス <instance_id> に対する Read|Write|All 権限をロール <role_name> に付与します。[privilegeproperties("conditions" = "<conditions>", "expires"="<days>")] はオプションです。*/ACL 構文を使用したポリシー承認
GRANT Read|Write|All ON instance <instance_id> TO ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]); /* インスタンス <instance_id> に対する Read|Write|All 権限をロール <role_name> に付与します。[, "conditions"= "<conditions>", "expires"="<days>"] はオプションです。*/
パラメーター
パラメーターの詳細については、「ACL ベースのアクセス制御」または「ポリシーベースのアクセス制御」をご参照ください。
例
`Bob@aliyun.com` が `test_project_a` プロジェクトのオーナーであり、プロジェクト内に `Worker` という名前のロールが作成されていると仮定します。以下の例は、`Worker` ロールに権限を付与する方法を示しています。
例 1: ロールに、テーブル、関数、インスタンスを作成し、プロジェクト内のすべてのオブジェクトをリストする権限を付与します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して権限を付与します。 GRANT CreateTable, CreateFunction, CreateInstance, List on project test_project_a to ROLE Worker; -- ポリシー承認に ACL 構文を使用して権限を付与します。 GRANT CreateTable, CreateFunction, CreateInstance, List ON project test_project_a TO ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 2: ロールにテーブルのメタデータとデータを読み取る権限を付与します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して権限を付与します。 GRANT Describe, Select ON TABLE sale_detail TO ROLE Worker; -- ポリシー承認に ACL 構文を使用して権限を付与します。 GRANT Describe, Select ON TABLE sale_detail TO ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 3: ロールにモデルに対するすべての権限を付与します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して権限を付与します。 GRANT All ON MODEL my_model TO ROLE Worker; -- ポリシー承認に ACL 構文を使用して権限を付与します。 GRANT All ON MODEL my_model TO ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 4: ロールにリソースを読み取り、更新する権限を付与します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して権限を付与します。 GRANT Read, Write ON resource udtf.jar TO ROLE Worker; -- ポリシー承認に ACL 構文を使用して権限を付与します。 GRANT Read, Write ON resource udtf.jar TO ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 5: ロールに関数を読み取り、更新する権限を付与します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して権限を付与します。 GRANT Read, Write ON FUNCTION udf_test TO ROLE Worker; -- ポリシー承認に ACL 構文を使用して権限を付与します。 GRANT Read, Write ON FUNCTION udf_test TO ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 6: ロールにインスタンスに対するすべての操作権限を付与します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して権限を付与します。 GRANT All ON instance 202112300224**** TO ROLE Worker; -- ポリシー承認に ACL 構文を使用して権限を付与します。 GRANT All ON instance 202112300224**** TO ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
オブジェクトに対する操作権限をロールから取り消す
プロジェクト、テーブル、モデル、リソース、関数、またはインスタンスに対する操作権限をロールから取り消すことができます。
コマンドフォーマット
プロジェクトに対する操作権限をロールから取り消す
ACL を使用して付与された権限を取り消す
REVOKE Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All ON project <project_name> FROM ROLE <role_name>; /* プロジェクト <project_name> に対する Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All 権限をロール <role_name> から取り消します。*/ポリシー承認を使用して付与された権限を取り消す
REVOKE Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All ON project <project_name> FROM ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"); /* プロジェクト <project_name> に対する Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All 権限をロール <role_name> から取り消します。*/
テーブルに対する操作権限をロールから取り消す
ACL を使用して付与された権限を取り消す
REVOKE Describe|Select|Alter|Update|Drop|ShowHistory|All ON TABLE <table_name> [(<column_list>)] FROM ROLE <role_name>; /* テーブル <table_name> に対する Describe|Select|Alter|Update|Drop|ShowHistory|All 権限をロール <role_name> から取り消します。[(<column_list>)] はオプションです。*/ポリシー承認を使用して付与された権限を取り消す
REVOKE Describe|Select|Alter|Update|Drop|ShowHistory|All ON TABLE <table_name> [(<column_list>)] FROM ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"); /* テーブル <table_name> に対する Describe|Select|Alter|Update|Drop|ShowHistory|All 権限をロール <role_name> から取り消します。[(<column_list>)] はオプションです。*/
モデルに対する操作権限をロールから取り消す
ACL を使用して付与された権限を取り消す
REVOKE Describe|Execute|Alter|Drop|All ON MODEL <model_name> FROM ROLE <role_name>;ポリシー承認を使用して付与された権限を取り消す
REVOKE Describe|Execute|Alter|Drop|All ON MODEL <model_name> FROM ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
リソースに対する操作権限をロールから取り消す
ACL を使用して付与された権限を取り消す
REVOKE Read|Write|Delete|All ON resource <resource_name> FROM ROLE <role_name>; /* リソース <resource_name> に対する Read|Write|Delete|All 権限をロール <role_name> から取り消します。*/ポリシー承認を使用して付与された権限を取り消す
REVOKE Read|Write|Delete|All ON resource <resource_name> FROM ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"); /* リソース <resource_name> に対する Read|Write|Delete|All 権限をロール <role_name> から取り消します。*/
関数に対する操作権限をロールから取り消す
ACL を使用して付与された権限を取り消す
REVOKE Read|Write|Delete|Execute|All ON FUNCTION <function_name> FROM ROLE <role_name>; /* 関数 <function_name> に対する Read|Write|Delete|Execute|All 権限をロール <role_name> から取り消します。*/ポリシー承認を使用して付与された権限を取り消す
REVOKE Read|Write|Delete|Execute|All ON FUNCTION <function_name> FROM ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"); /* 関数 <function_name> に対する Read|Write|Delete|Execute|All 権限をロール <role_name> から取り消します。*/
インスタンスに対する操作権限をロールから取り消す
ACL を使用して付与された権限を取り消す
REVOKE Read|Write|All ON instance <instance_id> FROM ROLE <role_name>; /* インスタンス <instance_id> に対する Read|Write|All 権限をロール <role_name> から取り消します。*/ポリシー承認を使用して付与された権限を取り消す
REVOKE Read|Write|All ON instance <instance_id> FROM ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"); /* インスタンス <instance_id> に対する Read|Write|All 権限をロール <role_name> から取り消します。*/
パラメーター
パラメーターの詳細については、「ACL ベースのアクセス制御」または「ポリシーベースのアクセス制御」をご参照ください。
例
次の例は、`Worker` ロールから権限を取り消す方法を示しています。
例 1: `Worker` ロールから、テーブル、関数、インスタンスを作成し、プロジェクト内のすべてのオブジェクトをリストする権限を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して付与された権限を取り消します。 REVOKE CreateTable, CreateFunction, CreateInstance, List ON project test_project_a FROM ROLE Worker; -- ポリシー承認を使用して付与された権限を取り消します。 REVOKE CreateTable, CreateFunction, CreateInstance, List ON project test_project_a FROM ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 2: `Worker` ロールからテーブルのメタデータとデータを読み取る権限を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して付与された権限を取り消します。 REVOKE Describe, Select ON TABLE sale_detail TO ROLE Worker; -- ポリシー承認を使用して付与された権限を取り消します。 REVOKE Describe, Select ON TABLE sale_detail FROM ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 3: `Worker` ロールからモデルに対するすべての権限を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 use test_project_a; -- ACL を使用して付与された権限を取り消します。 REVOKE All ON MODEL my_model FROM ROLE Worker; -- ポリシー承認を使用して付与された権限を取り消します。 REVOKE All ON MODEL my_model FROM ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 4: `Worker` ロールからリソースを読み取り、更新する権限を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- ACL を使用して付与された権限を取り消します。 REVOKE Read, Write ON resource udtf.jar FROM ROLE Worker; -- ポリシー承認を使用して付与された権限を取り消します。 REVOKE Read, Write ON resource udtf.jar FROM ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 5: `Worker` ロールから関数を読み取り、更新する権限を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- ACL を使用して付与された権限を取り消します。 REVOKE Read, Write ON FUNCTION udf_test FROM ROLE Worker; -- ポリシー承認を使用して付与された権限を取り消します。 REVOKE Read, Write ON FUNCTION udf_test FROM ROLE Worker privilegeproperties("policy" = "true", "allow"="true");例 6: `Worker` ロールからインスタンスに対するすべての操作権限を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- ACL を使用して付与された権限を取り消します。 REVOKE All ON instance 202112300224**** FROM ROLE Worker; -- ポリシー承認を使用して付与された権限を取り消します。 REVOKE All ON instance 202112300224**** FROM ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
ダウンロード権限をロールに付与する
テーブル、リソース、関数、またはインスタンスからデータをダウンロードする権限をロールに付与できます。
コマンドフォーマット
GRANT Download ON {Table|Resource|Function|Instance} <object_name> TO ROLE <role_name>; /* {Table|Resource|Function|Instance} <object_name> に対するダウンロード権限をロール <role_name> に付与します。*/パラメーター
パラメーターの詳細については、「ダウンロード権限の制御」をご参照ください。
例
`test_project_a` プロジェクトでダウンロード権限コントロールが有効になっていると仮定します。次の例は、`Worker` ロールに特定のテーブルからデータをダウンロードする権限を付与する方法を示しています。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Bob が Worker ロールに権限を付与します。 GRANT Download ON TABLE sale_detail TO ROLE Worker;
ダウンロード権限をロールから取り消す
テーブル、リソース、関数、またはインスタンスからデータをダウンロードする権限をロールから取り消すことができます。
コマンドフォーマット
REVOKE Download ON {Table|Resource|Function|Instance} <object_name> FROM ROLE <role_name>; /* {Table|Resource|Function|Instance} <object_name> に対するダウンロード権限をロール <role_name> から取り消します。*/パラメーター
パラメーターの詳細については、「ダウンロード権限の制御」をご参照ください。
例
次の例は、`Worker` ロールから特定のテーブルのデータをダウンロードする権限を取り消す方法を示しています。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Bob が Worker ロールから権限を取り消します。 REVOKE Download ON TABLE sale_detail FROM ROLE Worker;
高秘密度データにアクセスする権限をロールに付与する
ロールに権限レベルのラベルを設定した後、ロールがより高い秘密度レベルのデータにアクセスする必要がある場合は、必要な権限を付与する必要があります。ユーザーまたはロールに権限レベルのラベルを設定する方法の詳細については、「ユーザーまたはロールに権限レベルのラベルを設定する」をご参照ください。
コマンドフォーマット
GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO ROLE <role_name> [WITH exp <days>]; /* テーブル <table_name> のラベル <number> のデータにアクセスする権限をロール <role_name> に付与します。[(<column_list>)] と [WITH exp <days>] はオプションです。*/パラメーター
パラメーターの詳細については、「明示的なラベルベースの権限付与」をご参照ください。
例
`test_project_a` プロジェクトで、`Worker` ロールの権限レベルのラベルが 2 であると仮定します。次の例は、このロールに `sale_detail` テーブルの最大秘密度レベル 4 のデータにアクセスする権限を付与する方法を示しています。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Bob が Worker ロールに権限を付与します。 GRANT Label 4 ON TABLE sale_detail TO ROLE Worker;
高秘密度データにアクセスする権限をロールから取り消す
ロールから高秘密度データにアクセスする権限を取り消すことができます。ロール自体の権限レベルは影響を受けません。
コマンドフォーマット
REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM ROLE <role_name>; /* テーブル <table_name> に対するラベルアクセス権限をロール <role_name> から取り消します。[(<column_list>)] はオプションです。*/パラメーター
パラメーターの詳細については、「明示的なラベルベースの権限付与を取り消す」をご参照ください。
例
次の例は、`Worker` ロールから `sale_detail` テーブルの最大秘密度レベル 4 のデータにアクセスする権限を取り消す方法を示しています。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Bob が Worker ロールから権限を取り消します。 REVOKE Label ON TABLE sale_detail FROM ROLE Worker;
ユーザーにロールをアタッチする
プロジェクトレベルの組み込みロールまたはカスタムロールをユーザーにアタッチできます。これにより、ユーザーはロールの権限を継承します。
コマンドフォーマット
GRANT <role_name> TO <user_name>; /* ロール <role_name> をユーザー <user_name> に割り当てます。*/注意事項
複数のユーザーを同じロールにアタッチでき、1 人のユーザーを複数のロールにアタッチできます。
パラメーター
パラメーター
必須
説明
role_name
はい
ユーザーにアタッチするロールの名前。
list roles;コマンドをMaxCompute クライアントで実行して、ロール情報を確認できます。user_name
はい
ロールをアタッチするユーザーの名前。
MaxCompute クライアントで
list users;コマンドを実行して、ユーザー情報を表示できます。例
この例では、MaxCompute プロジェクトで「Worker」ロールをユーザー「Ka**@aliyun.com」と RAM ユーザー「RAM$Bob@aliyun.com:Allen」にアタッチする方法を示します。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Bob がユーザーにロールをアタッチします。 GRANT Worker TO ALIYUN$Ka**@aliyun.com; GRANT Worker TO RAM$Bob@aliyun.com:Allen;
ユーザーからロールをデタッチする
ユーザーからロールをデタッチできます。ユーザーは、そのロールによって付与された権限を持たなくなります。
コマンドフォーマット
REVOKE <role_name> FROM <user_name>; /* ユーザー <user_name> からロール <role_name> を取り消します。*/パラメーター
パラメーター
必須
説明
role_name
はい
ユーザーからデタッチするロールの名前。
MaxCompute クライアントで
list roles;コマンドを実行して、ロール名を取得できます。user_name
はい
ロールをデタッチするユーザーの名前。
MaxCompute クライアントを使用して
list users;コマンドを実行し、ユーザー名を取得できます。例
この例では、「Worker」ロールを「Kate@aliyun.com」と「RAM$Bob@aliyun.com:Allen」からデタッチする方法を示します。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Bob がユーザーからロールをデタッチします。 REVOKE Worker FROM ALIYUN$Kate@aliyun.com; REVOKE Worker FROM RAM$Bob@aliyun.com:Allen;
次のステップ
ロールに権限を付与した後、必要に応じて次の操作を実行できます。