當需要為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 Describe|Execute|Alter|Drop|All ON MODEL <model_name> TO ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];通過ACL文法實現Policy授權
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>")];通過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 All ON MODEL my_model TO ROLE Worker; --通過ACL文法實現Policy授權。 GRANT All ON MODEL my_model 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 Describe|Execute|Alter|Drop|All ON MODEL <model_name> FROM ROLE <role_name>;撤銷Policy授權
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>;撤銷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 All ON MODEL my_model FROM ROLE Worker; --撤銷Policy授權。 REVOKE All ON MODEL my_model 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$Ka**@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;
後續指引
完成角色授權後,您可以根據實際業務需要執行如下操作: