安裝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>;