MaxCompute支持通過SQL語句查詢用戶、角色、對象等的權限信息。本文為您介紹SQL權限查詢語法并提供示例供參考。
基于MaxCompute提供的授權方案為用戶或角色授權后,您可以查詢如下權限信息。
查詢場景 | 查詢操作 | 操作人角色 | 操作入口 |
查詢角色的權限信息 | |||
項目的所有者(Project Owner)、具備Super_Administrator或Admin角色的用戶 | |||
查詢用戶的權限信息 | |||
查詢對象的ACL授權信息 | |||
查詢Label授權信息 | |||
查詢Package授權信息 | |||
查看用戶權限或角色權限信息時,MaxCompute會在返回信息中使用如下標記字符:
A:表示Allow,即允許的操作權限。
D:表示Deny,即拒絕的操作權限。
C:表示With Condition,即帶條件的授權。
G:表示With Grant Option,即可以對客體(Object)進行授權。
查詢指定角色的權限
命令格式
show grants for role <role_name>;
參數說明
參數名稱
是否必填
說明
role_name
是
指定待查詢權限的角色名稱。
您可以通過MaxCompute客戶端執行
list roles;
命令獲取角色名稱。返回信息
查詢結果會返回ACL、Policy、Download權限信息。
使用示例
假設項目名為test_project_a,Worker為項目中的角色,命令示例如下。
show grants for role Worker;
返回結果如下。
Authorization Type: ACL [role/Worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/tables/bank_data: Download | Describe | Select Expires:20xx-xx-xxTxx:xx:xx+xxxx Authorization Type: Policy [role/Worker] A projects/test_project_a/tables/bak*: Download A projects/test_project_a/tables/sale_detail: Update A projects/test_project_a/tables/tb_*: Download | Drop A projects/test_project_a/tables/view_1: Drop
查詢指定角色的權限及綁定的用戶信息
命令格式
describe role <role_name>;
參數說明
參數名稱
是否必填
說明
role_name
是
指定待查詢權限的角色名稱。
您可以通過MaxCompute客戶端執行
list roles;
命令獲取角色名稱。返回信息
查詢結果會返回ACL、Policy、Download權限信息。
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Worker為項目中的角色,命令示例如下。
describe role Worker;
返回結果如下。
[users] RAM$Bob@aliyun.com:Allen Authorization Type: ACL A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/tables/bank_data: Download Authorization Type: Policy A projects/test_project_a/tables/bak*: Download A projects/test_project_a/tables/sale_detail: Update A projects/test_project_a/tables/tb_*: Download | Drop A projects/test_project_a/tables/view_1: Drop
查詢當前用戶的權限及綁定的角色信息
命令格式
show grants;
返回信息
查詢結果會返回如下信息:
項目所有者:賬號信息、項目列表信息。
其他用戶:綁定的角色信息、ACL、Policy及Download權限信息。
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Allen為隸屬于test_project_a的RAM用戶,已經被添加到test_project_a中。
假設當前項目的訪問者為Bob,執行
show grants;
命令,返回結果如下。[ALIYUN$Bob@aliyun.com] projects/test_project_a: Project Owner
假設當前項目的訪問者為Allen,執行
show grants;
命令,返回結果如下。[roles] worker Authorization Type: ACL [user/RAM$Bob@aliyun.com:Allen] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/packages/project_test_b.datashare: Read Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Drop | Download
查詢指定用戶的權限信息和綁定的角色信息
命令格式
show grants for <user_name>;
參數說明
參數名稱
是否必填
說明
user_name
是
指定待查詢權限的用戶名稱。
您可以通過MaxCompute客戶端執行
list users;
命令獲取用戶名稱。返回信息
查詢結果會返回如下信息:
項目所有者:賬號信息、項目列表信息。
其他用戶:綁定的角色信息、ACL、Policy及Download權限信息。
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Allen為隸屬于test_project_a的RAM用戶,已經被添加到test_project_a中。
查詢Bob的權限信息,命令示例如下。
show grants for ALIYUN$Bob@aliyun.com;
返回結果如下。
[ALIYUN$Bob@aliyun.com] projects/test_project_a: Project Owner
查詢Allen的權限信息,命令示例如下。
show grants for RAM$Bob@aliyun.com:Allen;
返回結果如下。
[roles] worker Authorization Type: ACL [user/RAM$Bob@aliyun.com:Allen] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/packages/project_test_b.datashare: Read Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Drop | Download
查詢指定對象的ACL授權信息
命令格式
show acl for <object_name> [on type <object_type>];
參數說明
參數名稱
是否必填
說明
object_name
是
指定待查詢對象的名稱。
項目名稱:您可以登錄MaxCompute控制臺,左上角切換地域后,即可在項目管理頁簽獲取具體的MaxCompute項目名稱。查詢類型為Project時,只能查詢當前Project的信息。
表名稱:您可以通過MaxCompute客戶端執行
show tables;
命令獲取表或視圖名稱。資源名稱:您可以通過MaxCompute客戶端執行
list resources;
命令獲取資源名稱。函數名稱:您可以通過MaxCompute客戶端執行
list functions;
命令獲取函數名稱。實例名稱:您可以通過MaxCompute客戶端執行
show instances;
命令獲取實例ID。
object_type
否
指定待查詢對象的類型。
取值如下:
Project:項目
Table:表
Resource:資源文件
Function:函數
Instance:實例
未配置
on type <object_type>
時,默認的對象類型為Table。返回信息
查詢結果會返回具備對象操作權限的項目角色及用戶信息、ACL權限信息。
使用示例
查看test_project_a項目中的對象授權信息。
查詢項目的權限信息,命令示例如下。
show acl for test_project_a on type project;
返回結果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A role/worker(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction | List A role/worker1(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction | List A role/worker2(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction
查詢表的權限信息,命令示例如下。
show acl for sale_detail on type table;
返回結果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/tables/sale_detail/customer_id): Describe | Select A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/tables/sale_detail/shop_name): Describe | Select
查詢資源的權限信息,命令示例如下。
show acl for udtf.jar on type resource;
返回結果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/resources/udtf.jar): Read | Write
查詢函數的權限信息,命令示例如下。
show acl for UDTFResource on type function;
返回結果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A role/worker1(acs:odps:*:projects/test_project_a/registration/functions/udtfresource): Download A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/registration/functions/udtfresource): All
查詢實例的權限信息,命令示例如下。
show acl for 20220105031923461ghu**** on type instance;
返回結果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/instances/20220105031923461ghu****): All
查詢當前用戶可訪問的所有高敏感等級數據表
命令格式
show label grants;
返回信息
查詢結果會返回如下信息:
當前用戶的訪問許可等級(User Label)
可訪問的高敏感等級數據表(TableName)
用戶可訪問的敏感數據級別(GrantedLabel)
權限過期時間(Expires)
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Allen為隸屬于test_project_a的RAM用戶,已經被添加到test_project_a中。
假設當前項目的訪問者為Bob,執行
show label grants;
命令,返回結果如下。User Label: 0 +--------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +--------------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:30:47+0800 | +--------------+--------------+--------------------------+ | bank_data_pt | 4 | 2022-07-04T16:36:04+0800 | +--------------+--------------+--------------------------+
假設當前項目的訪問者為Allen,執行
show label grants;
命令,返回結果如下。User Label: 1 +-------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | sale_detail | 2 | 2022-01-09T11:43:27+0800 | +-------------+--------------+--------------------------+
查詢當前用戶可訪問的指定等級的高敏感數據表
命令格式
show label <level> grants;
參數信息
參數名稱
是否必填
說明
level
是
指定敏感等級。
返回信息
查詢結果會返回如下信息:
當前用戶的訪問許可等級(User Label)
可訪問的高敏感等級數據表(TableName)
用戶可訪問的敏感數據級別(GrantedLabel)
權限過期時間(Expires)
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Allen為隸屬于test_project_a的RAM用戶,已經被添加到test_project_a中。
假設當前項目的訪問者為Bob,執行命令如下。
show label 3 grants;
返回結果如下。
User Label: 0 +--------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +--------------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:30:47+0800 | +--------------+--------------+--------------------------+
假設當前項目的訪問者為Allen,執行命令如下。
show label 2 grants;
返回結果如下。
User Label: 1 +-------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | sale_detail | 2 | 2022-01-09T11:43:27+0800 | +-------------+--------------+--------------------------+
查詢指定用戶可訪問的高敏感等級數據表
命令格式
show label grants for user <user_name>;
參數說明
參數名稱
是否必填
說明
user_name
是
指定待查詢權限的用戶名稱。
您可以通過MaxCompute客戶端執行
list users;
命令獲取用戶名稱。返回信息
查詢結果會返回如下信息:
當前用戶的訪問許可等級(User Label)
可訪問的高敏感等級數據表(TableName)
用戶可訪問的敏感數據級別(GrantedLabel)
權限過期時間(Expires)
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Allen為隸屬于test_project_a的RAM用戶,已經被添加到test_project_a中。查詢Allen可訪問的高敏感等級數據表,命令示例如下。
show label grants for user RAM$Bob@aliyun.com:Allen;
返回結果如下。
User Label: 2 +-----------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-----------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:29:32+0800 | +-----------+--------------+--------------------------+
查詢指定用戶可訪問的指定等級的高敏感數據表
命令格式
show label <level> grants for user <user_name>;
參數說明
參數名稱
是否必填
說明
level
是
指定敏感等級。
user_name
是
指定待查詢權限的用戶名稱。
您可以通過MaxCompute客戶端執行
list users;
命令獲取用戶名稱。返回信息
查詢結果會返回如下信息:
當前用戶的訪問許可等級(User Label)
可訪問的高敏感等級數據表(TableName)
用戶可訪問的敏感數據級別(GrantedLabel)
權限過期時間(Expires)
使用示例
假設Bob@aliyun.com為test_project_a的項目所有者,Allen為隸屬于test_project_a的RAM用戶,已經被添加到test_project_a中。查詢Allen可訪問的高敏感等級數據表,命令示例如下。
show label 3 grants for user RAM$Bob@aliyun.com:Allen;
返回結果如下。
User Label: 2 +-----------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-----------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:29:32+0800 | +-----------+--------------+--------------------------+
查詢可以訪問指定敏感數據表的用戶
命令格式
show label grants on table <table_name>;
參數說明
參數名稱
是否必填
說明
table_name
是
指定表的名稱。
您可以通過MaxCompute客戶端執行
show tables;
命令獲取表名稱。返回信息
查詢結果會返回如下信息:
當前表的敏感數據等級范圍(Sensitive Label Range)
可訪問的用戶或角色(UserName)
用戶可訪問的敏感等級(GrantedLabel)
權限過期時間(Expires)
使用示例
查詢項目test_project_a中可訪問高敏感數據表sale_detail的用戶列表,命令示例如下。
show label grants on table sale_detail;
返回結果如下。
Sensitive Label Range: [3, 4] +-------------------------------------------------+--------------+--------------------------+ | UserName | GrantedLabel | Expires | +-------------------------------------------------+--------------+--------------------------+ | worker | 4 | 2022-07-04T11:23:35+0800 | +-------------------------------------------------+--------------+--------------------------+ | RAM$Bob@aliyun.com:Allen | 4 | 2022-07-04T17:54:00+0800 | +-------------------------------------------------+--------------+--------------------------+
查詢可以訪問指定敏感數據表的指定等級的用戶
命令格式
show label <level> grants on table <table_name>;
參數說明
參數名稱
是否必填
說明
level
是
指定敏感等級。
table_name
是
指定表的名稱。
您可以通過MaxCompute客戶端執行
show tables;
命令獲取表名稱。返回信息
查詢結果會返回如下信息:
當前表的敏感數據等級范圍(Sensitive Label Range)
可訪問的用戶或角色(UserName)
用戶可訪問的敏感等級(GrantedLabel)
權限過期時間(Expires)
使用示例
查詢項目test_project_a中可訪問高敏感數據表sale_detail的用戶列表,命令示例如下。
show label 4 grants on table sale_detail;
返回結果如下。
Sensitive Label Range: [3, 4] +-------------------------------------------------+--------------+--------------------------+ | UserName | GrantedLabel | Expires | +-------------------------------------------------+--------------+--------------------------+ | worker | 4 | 2022-07-04T11:23:35+0800 | +-------------------------------------------------+--------------+--------------------------+ | RAM$Bob@aliyun.com:Allen | 4 | 2022-07-04T17:54:00+0800 | +-------------------------------------------------+--------------+--------------------------+
查詢指定用戶在指定敏感數據表中的權限
命令格式
show label [<label>] grants on table <table_name> for user <user_name>;
參數說明
參數名稱
是否必填
說明
label
否
指定敏感等級。
table_name
是
指定表的名稱。
您可以通過MaxCompute客戶端執行
show tables;
命令獲取表名稱。user_name
是
指定待查詢權限的用戶名稱。
您可以通過MaxCompute客戶端執行
list users;
命令獲取用戶名稱。返回信息
查詢結果會返回如下信息:
當前用戶的訪問許可等級標簽(User Label)
用戶可訪問的表的列(Column)
用戶可訪問的敏感等級(GrantedLabel)
權限過期時間(Expires)
使用示例
查詢項目test_project_a中Allen可訪問sale_detail的數據,命令示例如下。
show label grants on table sale_detail for user RAM$Bob@aliyun.com:Allen;
返回結果如下。
User Label: 2 +-------------+--------------+--------------------------+ | Column | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | customer_id | 4 | 2022-07-04T17:54:00+0800 | +-------------+--------------+--------------------------+ | shop_name | 4 | 2022-07-04T17:54:00+0800 | +-------------+--------------+--------------------------+ | total_price | 4 | 2022-07-04T17:54:00+0800 | +-------------+--------------+--------------------------+
查詢指定表中所有列的敏感等級
命令格式
describe <table_name>;
參數說明
參數名稱
是否必填
說明
table_name
是
指定表的名稱。
您可以通過MaxCompute客戶端執行
show tables;
命令獲取表名稱。返回信息
查詢結果會包含當前表的敏感等級(TableLabel)、表的列最高敏感等級(MaxLabel)、各列的敏感等級(Label)。
使用示例
查詢項目test_project_a中表sale_detail及其列的敏感等級,命令示例如下。
describe sale_detail;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$Bob@aliyun.com | Project: project_test_a | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-12-13 11:27:04 | | LastDDLTime: 2021-12-13 11:27:04 | | LastModifiedTime: 2021-12-13 11:27:26 | +------------------------------------------------------------------------------------+ | TableLabel: 3 | | MaxLabel: L4 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 784 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | shop_name | string | 4 | | | customer_id | string | 4 | | | total_price | double | 3 | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | sale_date | string | | | region | string | | +------------------------------------------------------------------------------------+
查詢指定Package的授權信息
命令格式
show acl for <project_name>.<package_name> on type package;
參數說明
參數名稱
是否必填
說明
project_name
是
指定待查詢Package所屬項目名稱。
您可以通過MaxCompute客戶端執行
describe package <package_name>;
命令查詢Package所屬項目名稱。package_name
是
指定待查詢Package的名稱。
您可以通過MaxCompute客戶端執行
show packages;
命令查詢Package名稱。返回信息
查詢結果會返回具備對象操作權限的項目內置角色及賬號信息、ACL權限信息。
使用示例
查看test_project_b項目中安裝的datashare Package的授權信息。命令示例如下。
show acl for test_project_b.datashare on type package;
返回結果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Amy@aliyun.com:Bella(acs:odps:*:projects/test_project_b/packages/test_project_a.datashare): Read
查詢指定Package內資源的授權信息
命令格式
show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package _name>");
參數說明
參數名稱
是否必填
說明
object_type
是
指定待查詢Package內的資源類型。
您可以通過MaxCompute客戶端執行
describe package <project_name>.<package_name>;
命令查詢Package內的資源類型。object_name
是
指定待查詢資源的名稱。
您可以通過MaxCompute客戶端執行
describe package <project_name>.<package_name>;
命令查詢Package內的資源名稱。project_name
是
指定待查詢Package所屬項目名稱。
您可以通過MaxCompute客戶端執行
describe package <project_name>.<package_name>;
命令查詢Package所屬項目名稱。package_name
是
指定待查詢Package的名稱。
您可以通過MaxCompute客戶端執行
show packages;
命令查詢Package名稱。返回信息
查詢結果會返回具備對象操作權限的項目內置角色及用戶、ACL權限信息。
使用示例
查看安裝的datashare Package中表sale_detail的授權信息。命令示例如下。
show grants on Table sale_detail privilegeproperties ("refobject"="true", "refproject"="test_project_a", "package"="datashare");
返回結果如下。
Authorization Type: Implicit AG project_owner/: All Authorization Type: InstalledObjecACL [datashare] A user/RAM$Amy@aliyun.com:Bella(acs:odps:*:projects/test_project_a/tables/sale_detail): Select
查詢指定Package內表的Label授權信息
命令格式
show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
參數說明
參數名稱
是否必填
說明
table_name
是
指定待查詢Package內的表名稱。
您可以通過MaxCompute客戶端執行
describe package <project_name>.<package_name>;
命令查詢Package內的表名稱。project_name
是
指定待查詢Package所屬項目名稱。
您可以通過MaxCompute客戶端執行
describe package <package_name>;
命令查詢Package所屬項目名稱。package_name
是
指定待查詢Package的名稱。
您可以通過MaxCompute客戶端執行
show packages;
命令查詢Package名稱。返回信息
查詢結果會返回如下信息:
當前表的敏感數據等級范圍(Sensitive Label Range)
可訪問的用戶或角色(UserName)
用戶可訪問的敏感等級(GrantedLabel)
權限過期時間(Expires)
使用示例
查看安裝的datashare Package中表sale_detail的Label授權信息。命令示例如下。
show label grants on table sale_detail privilegeproperties ("refobject"="true", "refproject"="test_project_a", "package"="datashare");
返回結果如下。
Sensitive Label Range: [2, 4] +-------------------------------------------------+--------------+--------------------------+ | UserName | GrantedLabel | Expires | +-------------------------------------------------+--------------+--------------------------+ | RAM$Amy@aliyun.com:Bella | 3 | 2022-07-12T22:24:24+0800 | +-------------------------------------------------+--------------+--------------------------+