安裝Package后,如果您需要對Package進行更細微的權限控制,例如控制只能訪問Package內的部分資源或控制只能訪問Package內表的部分列,您可以通過MaxCompute提供的細粒度授權(ACL)或LABEL授權實現。本文為您介紹如何通過這兩種方式為用戶或角色授權或撤銷Package內資源的相應權限。
背景信息
MaxCompute對Package提供如下兩種權限控制策略。
權限控制策略 | 說明 | 授權人 | 授權操作入口 |
在安裝Package的項目中,對Package內的部分資源通過ACL方式(基于對象)授權或撤銷授權。授權后,安裝Package的項目中的用戶即可對指定對象執行指定操作。 | 項目所有者(Project Owner)或具備Admin角色的用戶。 | ||
在安裝Package的項目中,對Package內的表資源通過LABEL方式進行授權或撤銷授權。授權后,安裝Package的項目中的用戶僅能訪問不超過指定LABEL等級的敏感數據信息,在細粒度授權基礎上,實現更精細化的數據權限管理。更多LABEL信息,請參見Label權限控制。 |
細粒度授權(ACL)
對Package內部分資源進行ACL授權,語法格式如下。
--對指定對象授權。 grant <actions> on <object_type> <object_name> to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>"); --對表的列授權。 grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
查看Package內資源的ACL授權信息,語法格式如下。
show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
撤銷Package內部分資源的ACL授權,語法格式如下。
--撤銷對象授權。 revoke <actions> on <object_type> <object_name> from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>"); --撤銷表的列授權。 revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
語法中各參數的含義如下:
actions:必填。指定授予的操作權限。您可以執行
describe package project_name.package_name;
命令來查詢Package中打包的操作權限。object_type:必填。指定Package中對象的類型。您可以執行
describe package project_name.package_name;
命令來查詢Package中打包的對象類型。object_name:必填。指定Package中對象的名稱。您可以執行
describe package project_name.package_name;
命令來查詢Package中打包的對象名稱。table_name:必填。指定表的名稱。您可以執行
describe package project_name.package_name;
命令來查詢Package中打包的表名稱。column_list:可選。指定列名。多個列名需要用英文逗號(,)分隔。
"refobject"="true":必填。表示對Package進行細粒度授權。
"refproject"="<project_name>":必填。指定Package所屬MaxCompute項目的名稱。
"package"="<package_name>":必填。指定Package的名稱。
LABEL授權
在細粒度授權基礎上,對Package內的表實現按照LABEL授權,用戶只能訪問指定LABEL級別的表數據。
對Package內表資源進行LABEL授權,語法格式如下。
grant label <number> on table <table_name[(<column_list>)]> to [user|role] <name>[with exp <days>] privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
查看Package的LABEL授權信息,語法格式如下。
show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
撤銷Package內表資源的LABEL授權,語法格式如下。
revoke label on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
語法中各參數的含義如下:
number:指定安全許可標簽級別,即數據敏感等級。更多安全許可標簽信息,請參見Label權限控制。
table_name:必填。指定表的名稱。您可以執行
describe package project_name.package_name;
命令來查詢Package中打包的表名稱。column_list:可選。指定列名。多個列名需要用英文逗號(,)分隔。
days:可選。指定權限有效時長。以天為單位。不指定時,默認過期時間是180天。
"refobject"="true":必填。表示對Package進行細粒度授權。
"refproject"="<project_name>":必填。指定Package所屬MaxCompute項目的名稱。
"package"="<package_name>":必填。指定Package的名稱。
使用示例
基于基于Package跨項目訪問資源中的場景示例,上述兩種授權方式的使用示例如下:
示例1:細粒度授權。由John將Package中sampletable表的讀取表數據權限(Select)授權給Bob。
use prj2; --將sampletable表的讀取表數據權限(Select)授權給Bob。 grant Select on table sampletable to user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); --查看Package內sampletable表的ACL授權信息。 show grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); --撤銷對Bob的ACL授權。 revoke Select on table sampletable from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
示例2:LABEL授權。假設sampletable表有3列(t1、t2、t3),且設置各列的LABEL級別為1、2、3。由John將Package中sampletable表的敏感等級為2的數據授權給Bob,有效時長為7天。
use prj2; --開啟LabelSecurity安全機制。 set LabelSecurity=true; --設置各列LABEL級別。 set label 1 to table sampletable(t1); set label 2 to table sampletable(t2); set label 3 to table sampletable(t3); --將sampletable表的敏感等級為2的數據授權給Bob,有效時長為7天。上一示例中Bob已經具備讀取表數據的權限,則通過LABEL授權后,Bob具備讀取t2列數據的權限。 grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7 privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); --查看Package內sampletable表的LABEL授權信息。 show label grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); --撤銷對Bob的LABEL授權。 revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
說明如果對Package內表資源進行了LABEL授權,則資源提供方授予其他項目使用Package的權限時,需要增加Label和級別的聲明,命令語法規則如下。
allowproject<project_name>toinstallpackage<package_name>usinglabel<number>;