當需要為MaxCompute專案中的多個使用者授予相同許可權時,您可以在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>")];
通過ACL文法實現Policy授權
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>"]);
為角色授予表的操作許可權
ACL授權
grant Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通過ACL文法實現Policy授權
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>"]);
為角色授予資源的操作許可權
ACL授權
grant Read|Write|Delete|All on resource <resource_name> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通過ACL文法實現Policy授權
grant Read|Write|Delete|All on resource <resource_name> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
為角色授予函數的操作許可權
ACL授權
grant Read|Write|Delete|Execute|All on function <function_name> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通過ACL文法實現Policy授權
grant Read|Write|Delete|Execute|All on function <function_name> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
為角色授予執行個體的操作許可權
ACL授權
grant Read|Write|All on instance <instance_id> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通過ACL文法實現Policy授權
grant Read|Write|All on instance <instance_id> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
參數說明
詳細參數解釋,請參見ACL許可權控制或Policy許可權控制。
使用樣本
假設Bob@aliyun.com是test_project_a的專案所有者,test_project_a專案已建立了角色Worker,現需要對角色進行授權。命令樣本如下。
樣本一:為角色授予在專案中建立表、函數、執行個體、查看專案所有類型的對象列表的許可權。
--Bob進入test_project_a專案。 use test_project_a; --ACL授權。 grant CreateTable, CreateFunction, CreateInstance, List on project test_project_a to ROLE Worker; --通過ACL文法實現Policy授權。 grant CreateTable, CreateFunction, CreateInstance, List on project test_project_a to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本二:為角色授予讀取表的元資訊和表資料的許可權。
--Bob進入test_project_a專案。 use test_project_a; --ACL授權。 grant Describe, Select on table sale_detail to ROLE Worker; --通過ACL文法實現Policy授權。 grant Describe, Select on table sale_detail to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本三:為角色授予讀取、更新資源的許可權。
--Bob進入test_project_a專案。 use test_project_a; --ACL授權。 grant Read, Write on resource udtf.jar to ROLE Worker; --通過ACL文法實現Policy授權。 grant Read, Write on resource udtf.jar to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本四:為角色授予讀取、更新函數的許可權。
--Bob進入test_project_a專案。 use test_project_a; --ACL授權。 grant Read, Write on function udf_test to ROLE Worker; --通過ACL文法實現Policy授權。 grant Read, Write on function udf_test to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本五:為角色授予執行個體的所有操作許可權。
--Bob進入test_project_a專案。 use test_project_a; --ACL授權。 grant All on instance 202112300224**** to ROLE Worker; --通過ACL文法實現Policy授權。 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>;
撤銷Policy授權
revoke Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All on project <project_name> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤銷為角色授予的表的操作許可權
撤銷ACL授權
revoke Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] from ROLE <role_name>;
撤銷Policy授權
revoke Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤銷為角色授予的資源的操作許可權
撤銷ACL授權
revoke Read|Write|Delete|All on resource <resource_name> from ROLE <role_name>;
撤銷Policy授權
revoke Read|Write|Delete|All on resource <resource_name> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤銷為角色授予的函數的操作許可權
撤銷ACL授權
revoke Read|Write|Delete|Execute|All on function <function_name> from ROLE <role_name>;
撤銷Policy授權
revoke Read|Write|Delete|Execute|All on function <function_name> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤銷為角色授予的執行個體的操作許可權
撤銷ACL授權
revoke Read|Write|All on instance <instance_id> from ROLE <role_name>;
撤銷Policy授權
revoke Read|Write|All on instance <instance_id> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
參數說明
詳細參數解釋,請參見ACL許可權控制或Policy許可權控制。
使用樣本
撤銷為角色Worker授與權限。命令樣本如下。
樣本一:撤銷為角色Worker授予的在專案中建立表、函數、執行個體、查看專案所有類型的對象列表的許可權。
--Bob進入test_project_a專案。 use test_project_a; --撤銷ACL授權。 revoke CreateTable, CreateFunction, CreateInstance, List on project test_project_a from ROLE Worker; --撤銷Policy授權。 revoke CreateTable, CreateFunction, CreateInstance, List on project test_project_a from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本二:撤銷為角色Worker授予的讀取表的元資訊和表資料的許可權。
--Bob進入test_project_a專案。 use test_project_a; --撤銷ACL授權。 revoke Describe, Select on table sale_detail to ROLE Worker; --撤銷Policy授權。 revoke Describe, Select on table sale_detail from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本三:撤銷為角色Worker授予的讀取、更新資源的許可權。
--Bob進入test_project_a專案。 use test_project_a; --撤銷ACL授權。 revoke Read, Write on resource udtf.jar from ROLE Worker; --撤銷Policy授權。 revoke Read, Write on resource udtf.jar from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本四:撤銷為角色Worker授予的讀取、更新函數的許可權。
--Bob進入test_project_a專案。 use test_project_a; --撤銷ACL授權。 revoke Read, Write on function udf_test from ROLE Worker; --撤銷Policy授權。 revoke Read, Write on function udf_test from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
樣本五:撤銷為角色Worker授予的執行個體的所有操作許可權。
--Bob進入test_project_a專案。 use test_project_a; --撤銷ACL授權。 revoke All on instance 202112300224**** from ROLE Worker; --撤銷Policy授權。 revoke All on instance 202112300224**** from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
為角色授予Download許可權
為角色授予下載表資料、資源、函數或執行個體的許可權。
命令格式
grant Download on {Table|Resource|Function|Instance} <object_name> to ROLE <role_name>;
參數說明
詳細參數解釋,請參見Download許可權控制。
使用樣本
假設test_project_a專案開啟了Download許可權管控,需要為角色Worker授予下載指定表資料的許可權。命令樣本如下。
--Bob進入test_project_a專案。 use test_project_a; --Bob為角色Worker授權。 grant download on table sale_detail to ROLE Worker;
撤銷為角色授予的Download許可權
撤銷為角色授予的下載表資料、資源、函數或執行個體的許可權。
命令格式
revoke Download on {Table|Resource|Function|Instance} <object_name> from ROLE <role_name>;
參數說明
詳細參數解釋,請參見Download許可權控制。
使用樣本
撤銷為角色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>];
參數說明
詳細參數解釋,請參見Label顯式授權。
使用樣本
假設test_project_a專案中,角色的許可訪問標籤等級為2,現需要為角色Worker授予訪問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>;
參數說明
詳細參數解釋,請參見撤銷Label顯式授權。
使用樣本
撤銷為角色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
是
指定待賦予使用者的角色名稱。
您可以通過MaxCompute用戶端執行
list roles;
命令查看角色資訊。user_name
是
指定待綁定角色的使用者名稱稱。
您可以通過MaxCompute用戶端執行
list users;
命令查看使用者資訊。使用樣本
將角色Worker綁定至已添加到MaxCompute專案的使用者Kate@aliyun.com及RAM$Bob@aliyun.com:Allen。
--Bob進入test_project_a專案。 use test_project_a; --Bob將角色賦予使用者。 grant Worker to ALIYUN$Kate@aliyun.com; grant Worker to RAM$Bob@aliyun.com:Allen;
收回賦予使用者的角色
解除綁定賦予使用者的角色,使用者將不再具備角色相應的許可權。
命令格式
revoke <role_name> from <user_name>;
參數說明
參數名稱
是否必填
說明
role_name
是
指定待收回的角色名稱。
您可以通過MaxCompute用戶端執行
list roles;
命令擷取角色名稱。user_name
是
指定待收回角色相應的使用者名稱稱。
您可以通過MaxCompute用戶端執行
list users;
命令擷取使用者名稱稱。使用樣本
收回賦予使用者Kate@aliyun.com及RAM$Bob@aliyun.com:Allen的角色Worker。
--Bob進入test_project_a專案。 use test_project_a; --Bob收回賦予使用者的角色。 revoke Worker from ALIYUN$Kate@aliyun.com; revoke Worker from RAM$Bob@aliyun.com:Allen;
後續指引
完成角色授權後,您可以根據實際業務需要執行如下操作: