GRANT
GRANT語法用于給授予指定權(quán)限,例如表的讀寫權(quán)限、數(shù)據(jù)庫的所有權(quán)限等。
適用引擎
GRANT語法適用于寬表引擎和時序引擎。無版本限制。
語法
grant_permission_statement ::= GRANT privilege_definition ON resource_definition TO user_identifier
privilege_definition ::= ALL | READ | WRITE | ADMIN | TRASH | SYSTEM
resource_definition ::= GLOBAL | DATABASE identifier | SCHEMA identifier | TABLE identifier
使用說明
GRANT語句是否可以執(zhí)行成功,還取決于執(zhí)行者自身擁有的權(quán)限。
權(quán)限(privilege_definition)
共以下幾種權(quán)限:
權(quán)限 | 說明 |
ALL或ALL PRIVILEGE | 為用戶授予所有權(quán)限,包括下述四種權(quán)限。 |
READ | 為用戶授予“讀”權(quán)限。 |
WRITE | 為用戶授予“寫”權(quán)限。 |
ADMIN | 為用戶授予“管理員”權(quán)限。 重要 ADMIN權(quán)限與READ、WRITE權(quán)限是獨立的,授予了某個Database的ADMIN權(quán)限并不意味著就能夠讀寫該Database下所有的表,需單獨添加表的讀寫權(quán)限。 |
TRASH | 為用戶授予“刪除”權(quán)限。 |
SYSTEM | 為用戶授予集群層面的管理權(quán)限。包含GLOBAL ADMIN權(quán)限。 重要 不支持授予DATABASE粒度的SYSTEM權(quán)限。 |
權(quán)限范圍(resource_definition)
寬表引擎和時序引擎對GRANT
語句可授權(quán)的資源范圍的支持情況如下:
權(quán)限 | 寬表引擎 | 時序引擎 | 說明 |
GLOBAL | 〇 | 〇 | 授予全局所有資源的特定權(quán)限。 重要 建議不要輕易賦予GLOBAL權(quán)限,特別是GLOBAL ALL PRIVILEGES。 |
DATABASE | 〇 | 〇 | 授予指定Database的某個權(quán)限。作用等同于SCHEMA。 說明 寬表引擎2.5.3.3及以上版本支持 |
TABLE | 〇 | ?? | 授予指定表的某個權(quán)限。 |
權(quán)限資源范圍的優(yōu)先級:GLOBAL > DATABASE(SCHEMA)> TABLE。即如果擁有了GLOBAL的READ權(quán)限,則能讀取任意Database中的表。
在使用DATABASE、SCHEMA或TABLE關(guān)鍵字時,需添加對應級別的對象名稱(identifier)。例如DATABASE default
、SCHEMA default
、TABLE test
分別表示數(shù)據(jù)庫default和表test。
授權(quán)對象(user_identifier)
user_identifier為需要授權(quán)的用戶名。
示例
授予全部權(quán)限
為用戶user1授予數(shù)據(jù)庫db1的全部權(quán)限。
GRANT ALL ON DATABASE db1 TO user1;
-- 或者
GRANT ALL ON SCHEMA db1 TO user1;
授予指定權(quán)限
為用戶user2授予數(shù)據(jù)庫db2中的表table2的管理員權(quán)限。
GRANT ADMIN ON TABLE db2.table2 TO user2;
為用戶user3授予當前數(shù)據(jù)庫中表table3的寫權(quán)限。
GRANT WRITE ON TABLE table3 TO user3;
為用戶user4授予全局讀權(quán)限。
GRANT READ ON GLOBAL TO user4;