權(quán)限管理
權(quán)限管理
IoTDB 為用戶提供了權(quán)限管理操作,為用戶提供對數(shù)據(jù)與集群系統(tǒng)的權(quán)限管理功能,保障數(shù)據(jù)與系統(tǒng)安全。
本篇介紹IoTDB 中權(quán)限模塊的基本概念、用戶定義、權(quán)限管理、鑒權(quán)邏輯與功能用例。在 JAVA 編程環(huán)境中,您可以使用 JDBC API 單條或批量執(zhí)行權(quán)限管理類語句。
基本概念
用戶
用戶即數(shù)據(jù)庫的合法使用者。一個用戶與一個唯一的用戶名相對應(yīng),并且擁有密碼作為身份驗(yàn)證的手段。一個人在使用數(shù)據(jù)庫之前,必須先提供合法的(即存于數(shù)據(jù)庫中的)用戶名與密碼,作為用戶成功登錄。
權(quán)限
數(shù)據(jù)庫提供多種操作,但并非所有的用戶都能執(zhí)行所有操作。如果一個用戶可以執(zhí)行某項(xiàng)操作,則稱該用戶有執(zhí)行該操作的權(quán)限。權(quán)限通常需要一個路徑來限定其生效范圍,可以使用路徑模式靈活管理權(quán)限。
角色
角色是若干權(quán)限的集合,并且有一個唯一的角色名作為標(biāo)識符。角色通常和一個現(xiàn)實(shí)身份相對應(yīng)(例如交通調(diào)度員),而一個現(xiàn)實(shí)身份可能對應(yīng)著多個用戶。這些具有相同現(xiàn)實(shí)身份的用戶往往具有相同的一些權(quán)限,角色就是為了能對這樣的權(quán)限進(jìn)行統(tǒng)一的管理的抽象。
默認(rèn)用戶與角色
安裝初始化后的 IoTDB 中有一個默認(rèn)用戶:root,默認(rèn)密碼為 root。該用戶為管理員用戶,固定擁有所有權(quán)限,無法被賦予、撤銷權(quán)限,也無法被刪除,數(shù)據(jù)庫內(nèi)僅有一個管理員用戶。
一個新創(chuàng)建的用戶或角色不具備任何權(quán)限。
用戶定義
擁有 MANAGE_USER、MANAGE_ROLE 的用戶或者管理員可以創(chuàng)建用戶或者角色,需要滿足以下約束:
用戶名限制
4~32個字符,支持使用英文大小寫字母、數(shù)字、特殊字符(!@#$%^&*()_+-=)
用戶無法創(chuàng)建和管理員用戶同名的用戶。
密碼限制
4~32個字符,可使用大寫小寫字母、數(shù)字、特殊字符(!@#$%^&*()_+-=),密碼默認(rèn)采用 SHA-256 進(jìn)行加密。
角色名限制
4~32個字符,支持使用英文大小寫字母、數(shù)字、特殊字符(!@#$%^&*()_+-=)
用戶無法創(chuàng)建和管理員用戶同名的角色。
權(quán)限管理
IoTDB 主要有兩類權(quán)限:序列權(quán)限、全局權(quán)限。
序列權(quán)限
序列權(quán)限約束了用戶訪問數(shù)據(jù)的范圍與方式,支持對絕對路徑與前綴匹配路徑授權(quán),可對timeseries 粒度生效。
下表描述了這類權(quán)限的種類與范圍:
| 權(quán)限名稱 | 描述 |
|---|---|
| READ_DATA | 允許讀取授權(quán)路徑下的序列數(shù)據(jù)。 |
| WRITE_DATA | 允許讀取授權(quán)路徑下的序列數(shù)據(jù)。 允許插入、刪除授權(quán)路徑下的的序列數(shù)據(jù)。 允許在授權(quán)路徑下導(dǎo)入、加載數(shù)據(jù),在導(dǎo)入數(shù)據(jù)時,需要擁有對應(yīng)路徑的 WRITE_DATA 權(quán)限,在自動創(chuàng)建數(shù)據(jù)庫與序列時,需要有 MANAGE_DATABASE 與 WRITE_SCHEMA 權(quán)限。 |
| READ_SCHEMA | 允許獲取授權(quán)路徑下元數(shù)據(jù)樹的詳細(xì)信息: 包括:路徑下的數(shù)據(jù)庫、子路徑、子節(jié)點(diǎn)、設(shè)備、序列、模版、視圖等。 |
| WRITE_SCHEMA | 允許獲取授權(quán)路徑下元數(shù)據(jù)樹的詳細(xì)信息。 允許在授權(quán)路徑下對序列、模版、視圖等進(jìn)行創(chuàng)建、刪除、修改操作。 在創(chuàng)建或修改 view 的時候,會檢查 view 路徑的 WRITE_SCHEMA 權(quán)限、數(shù)據(jù)源的 READ_SCHEMA 權(quán)限。 在對 view 進(jìn)行查詢、插入時,會檢查 view 路徑的 READ_DATA 權(quán)限、WRITE_DATA 權(quán)限。 允許在授權(quán)路徑下設(shè)置、取消、查看TTL。 允許在授權(quán)路徑下掛載或者接觸掛載模板。 |
全局權(quán)限
全局權(quán)限約束了用戶使用的數(shù)據(jù)庫功能、限制了用戶執(zhí)行改變系統(tǒng)狀態(tài)與任務(wù)狀態(tài)的命令,用戶獲得全局授權(quán)后,可對數(shù)據(jù)庫進(jìn)行管理。
下表描述了系統(tǒng)權(quán)限的種類:
| 權(quán)限名稱 | 描述 |
|---|---|
| MANAGE_DATABASE | - 允許用戶創(chuàng)建、刪除數(shù)據(jù)庫. |
| MANAGE_USER | - 允許用戶創(chuàng)建、刪除、修改、查看用戶。 |
| MANAGE_ROLE | - 允許用戶創(chuàng)建、刪除、查看角色。 允許用戶將角色授予給其他用戶,或取消其他用戶的角色。 |
| USE_TRIGGER | - 允許用戶創(chuàng)建、刪除、查看觸發(fā)器。 與觸發(fā)器的數(shù)據(jù)源權(quán)限檢查相獨(dú)立。 |
| USE_UDF | - 允許用戶創(chuàng)建、刪除、查看用戶自定義函數(shù)。 與自定義函數(shù)的數(shù)據(jù)源權(quán)限檢查相獨(dú)立。 |
| USE_CQ | - 允許用戶創(chuàng)建、開始、停止、刪除、查看管道。 允許用戶創(chuàng)建、刪除、查看管道插件。 與管道的數(shù)據(jù)源權(quán)限檢查相獨(dú)立。 |
| USE_PIPE | - 允許用戶注冊、開始、停止、卸載、查詢流處理任務(wù)。 - 允許用戶注冊、卸載、查詢注冊流處理任務(wù)插件。 |
| EXTEND_TEMPLATE | - 允許自動擴(kuò)展模板。 |
| MAINTAIN | - 允許用戶查詢、取消查詢。 允許用戶查看變量。 允許用戶查看集群狀態(tài)。 |
| USE_MODEL | - 允許用戶創(chuàng)建、刪除、查詢深度學(xué)習(xí)模型 |
關(guān)于模板權(quán)限:
- 模板的創(chuàng)建、刪除、修改、查詢、掛載、卸載僅允許管理員操作。
- 激活模板需要擁有激活路徑的 WRITE_SCHEMA 權(quán)限
- 若開啟了自動創(chuàng)建,在向掛載了模板的不存在路徑寫入時,數(shù)據(jù)庫會自動擴(kuò)展模板并寫入數(shù)據(jù),因此需要有 EXTEND_TEMPLATE 權(quán)限與寫入序列的 WRITE_DATA 權(quán)限。
- 解除模板,需要擁有掛載模板路徑的 WRITE_SCHEMA 權(quán)限。
- 查詢使用了某個元數(shù)據(jù)模板的路徑,需要有路徑的 READ_SCHEMA 權(quán)限,否則將返回為空。
權(quán)限授予與取消
在 IoTDB 中,用戶可以由三種途徑獲得權(quán)限:
- 由超級管理員授予,超級管理員可以控制其他用戶的權(quán)限。
- 由允許權(quán)限授權(quán)的用戶授予,該用戶獲得權(quán)限時被指定了 grant option 關(guān)鍵字。
- 由超級管理員或者有 MANAGE_ROLE 的用戶授予某個角色進(jìn)而獲取權(quán)限。
取消用戶的權(quán)限,可以由以下幾種途徑:
- 由超級管理員取消用戶的權(quán)限。
- 由允許權(quán)限授權(quán)的用戶取消權(quán)限,該用戶獲得權(quán)限時被指定了 grant option 關(guān)鍵字。
- 由超級管理員或者M(jìn)ANAGE_ROLE 的用戶取消用戶的某個角色進(jìn)而取消權(quán)限。
- 在授權(quán)時,必須指定路徑。全局權(quán)限需要指定為 root.**, 而序列相關(guān)權(quán)限必須為絕對路徑或者以雙通配符結(jié)尾的前綴路徑。
- 當(dāng)授予角色權(quán)限時,可以為該權(quán)限指定 with grant option 關(guān)鍵字,意味著用戶可以轉(zhuǎn)授其授權(quán)路徑上的權(quán)限,也可以取消其他用戶的授權(quán)路徑上的權(quán)限。例如用戶 A 在被授予
集團(tuán)1.公司1.**的讀權(quán)限時制定了 grant option 關(guān)鍵字,那么 A 可以將集團(tuán)1.公司1以下的任意節(jié)點(diǎn)、序列的讀權(quán)限轉(zhuǎn)授給他人, 同樣也可以取消其他用戶集團(tuán)1.公司1下任意節(jié)點(diǎn)的讀權(quán)限。 - 在取消授權(quán)時,取消授權(quán)語句會與用戶所有的權(quán)限路徑進(jìn)行匹配,將匹配到的權(quán)限路徑進(jìn)行清理,例如用戶A 具有
集團(tuán)1.公司1.工廠1的讀權(quán)限, 在取消集團(tuán)1.公司1.**的讀權(quán)限時,會清除用戶A 的集團(tuán)1.公司1.工廠1的讀權(quán)限。
鑒權(quán)
用戶權(quán)限主要由三部分組成:權(quán)限生效范圍(路徑), 權(quán)限類型, with grant option 標(biāo)記:
userTest1 :
root.t1.** - read_schema, read_data - with grant option
root.** - write_schema, write_data - with grant option每個用戶都有一個這樣的權(quán)限訪問列表,標(biāo)識他們獲得的所有權(quán)限,可以通過 LIST PRIVILEGES OF USER <username> 查看他們的權(quán)限。
在對一個路徑進(jìn)行鑒權(quán)時,數(shù)據(jù)庫會進(jìn)行路徑與權(quán)限的匹配。例如檢查 root.t1.t2 的 read_schema 權(quán)限時,首先會與權(quán)限訪問列表的 root.t1.**進(jìn)行匹配,匹配成功,則檢查該路徑是否包含待鑒權(quán)的權(quán)限,否則繼續(xù)下一條路徑-權(quán)限的匹配,直到匹配成功或者匹配結(jié)束。
在進(jìn)行多路徑鑒權(quán)時,對于多路徑查詢?nèi)蝿?wù),數(shù)據(jù)庫只會將有權(quán)限的數(shù)據(jù)呈現(xiàn)出來,無權(quán)限的數(shù)據(jù)不會包含在結(jié)果中;對于多路徑寫入任務(wù),數(shù)據(jù)庫要求必須所有的目標(biāo)序列都獲得了對應(yīng)的權(quán)限,才能進(jìn)行寫入。
請注意,下面的操作需要檢查多重權(quán)限
- 開啟了自動創(chuàng)建序列功能,在用戶將數(shù)據(jù)插入到不存在的序列中時,不僅需要對應(yīng)序列的寫入權(quán)限,還需要序列的元數(shù)據(jù)修改權(quán)限。
- 執(zhí)行 select into 語句時,需要檢查源序列的讀權(quán)限與目標(biāo)序列的寫權(quán)限。需要注意的是源序列數(shù)據(jù)可能因?yàn)闄?quán)限不足而僅能獲取部分?jǐn)?shù)據(jù),目標(biāo)序列寫入權(quán)限不足時會報錯終止任務(wù)。
- View 權(quán)限與數(shù)據(jù)源的權(quán)限是獨(dú)立的,向 view 執(zhí)行讀寫操作僅會檢查 view 的權(quán)限,而不再對源路徑進(jìn)行權(quán)限校驗(yàn)。
功能語法與示例
IoTDB 提供了組合權(quán)限,方便用戶授權(quán):
| 權(quán)限名稱 | 權(quán)限范圍 |
|---|---|
| ALL | 所有權(quán)限 |
| READ | READ_SCHEMA、READ_DATA |
| WRITE | WRITE_SCHEMA、WRITE_DATA |
組合權(quán)限并不是一種具體的權(quán)限,而是一種簡寫方式,與直接書寫對應(yīng)的權(quán)限名稱沒有差異。
下面將通過一系列具體的用例展示權(quán)限語句的用法,非管理員執(zhí)行下列語句需要提前獲取權(quán)限,所需的權(quán)限標(biāo)記在操作描述后。
用戶與角色相關(guān)
- 創(chuàng)建用戶(需 MANAGE_USER 權(quán)限)
CREATE USER <userName> <password>
eg: CREATE USER user1 'passwd'- 刪除用戶 (需 MANEGE_USER 權(quán)限)
DROP USER <userName>
eg: DROP USER user1- 創(chuàng)建角色 (需 MANAGE_ROLE 權(quán)限)
CREATE ROLE <roleName>
eg: CREATE ROLE role1- 刪除角色 (需 MANAGE_ROLE 權(quán)限)
DROP ROLE <roleName>
eg: DROP ROLE role1- 賦予用戶角色 (需 MANAGE_ROLE 權(quán)限)
GRANT ROLE <ROLENAME> TO <USERNAME>
eg: GRANT ROLE admin TO user1- 移除用戶角色 (需 MANAGE_ROLE 權(quán)限)
REVOKE ROLE <ROLENAME> FROM <USER>
eg: REVOKE ROLE admin FROM user1- 列出所有用戶 (需 MANEGE_USER 權(quán)限)
LIST USER- 列出所有角色 (需 MANAGE_ROLE 權(quán)限)
LIST ROLE- 列出指定角色下所有用戶 (需 MANEGE_USER 權(quán)限)
LIST USER OF ROLE <roleName>
eg: LIST USER OF ROLE roleuser- 列出指定用戶下所有角色
用戶可以列出自己的角色,但列出其他用戶的角色需要擁有 MANAGE_ROLE 權(quán)限。
LIST ROLE OF USER <username>
eg: LIST ROLE OF USER tempuser- 列出用戶所有權(quán)限
用戶可以列出自己的權(quán)限信息,但列出其他用戶的權(quán)限需要擁有 MANAGE_USER 權(quán)限。
LIST PRIVILEGES OF USER <username>;
eg: LIST PRIVILEGES OF USER tempuser;- 列出角色所有權(quán)限
用戶可以列出自己具有的角色的權(quán)限信息,列出其他角色的權(quán)限需要有 MANAGE_ROLE 權(quán)限。
LIST PRIVILEGES OF ROLE <roleName>;
eg: LIST PRIVILEGES OF ROLE actor;- 修改密碼
用戶可以修改自己的密碼,但修改其他用戶密碼需要具備MANAGE_USER 權(quán)限。
ALTER USER <username> SET PASSWORD <password>;
eg: ALTER USER tempuser SET PASSWORD 'newpwd';授權(quán)與取消授權(quán)
用戶使用授權(quán)語句對賦予其他用戶權(quán)限,語法如下:
GRANT <PRIVILEGES> ON <PATHS> TO ROLE/USER <NAME> [WITH GRANT OPTION];
eg: GRANT READ ON root.** TO ROLE role1;
eg: GRANT READ_DATA, WRITE_DATA ON root.t1.** TO USER user1;
eg: GRANT READ_DATA, WRITE_DATA ON root.t1.**,root.t2.** TO USER user1;
eg: GRANT MANAGE_ROLE ON root.** TO USER user1 WITH GRANT OPTION;
eg: GRANT ALL ON root.** TO USER user1 WITH GRANT OPTION;用戶使用取消授權(quán)語句可以將其他的權(quán)限取消,語法如下:
REVOKE <PRIVILEGES> ON <PATHS> FROM ROLE/USER <NAME>;
eg: REVOKE READ ON root.** FROM ROLE role1;
eg: REVOKE READ_DATA, WRITE_DATA ON root.t1.** FROM USER user1;
eg: REVOKE READ_DATA, WRITE_DATA ON root.t1.**, root.t2.** FROM USER user1;
eg: REVOKE MANAGE_ROLE ON root.** FROM USER user1;
eg: REVOKE ALL ON ROOT.** FROM USER user1;非管理員用戶執(zhí)行授權(quán)/取消授權(quán)語句時,需要對<PATHS> 有<PRIVILEGES> 權(quán)限,并且該權(quán)限是被標(biāo)記帶有 WITH GRANT OPTION 的。
在授予取消全局權(quán)限時,或者語句中包含全局權(quán)限時(ALL 展開會包含全局權(quán)限),須指定 path 為 root.**。 例如,以下授權(quán)/取消授權(quán)語句是合法的:
GRANT MANAGE_USER ON root.** TO USER user1; GRANT MANAGE_ROLE ON root.** TO ROLE role1 WITH GRANT OPTION; GRANT ALL ON root.** TO role role1 WITH GRANT OPTION; REVOKE MANAGE_USER ON root.** FROM USER user1; REVOKE MANAGE_ROLE ON root.** FROM ROLE role1; REVOKE ALL ON root.** FROM ROLE role1;下面的語句是非法的:
GRANT READ, MANAGE_ROLE ON root.t1.** TO USER user1; GRANT ALL ON root.t1.t2 TO USER user1 WITH GRANT OPTION; REVOKE ALL ON root.t1.t2 FROM USER user1; REVOKE READ, MANAGE_ROLE ON root.t1.t2 FROM ROLE ROLE1;<PATH> 必須為全路徑或者以雙通配符結(jié)尾的匹配路徑,以下路徑是合法的:
root.** root.t1.t2.** root.t1.t2.t3以下的路徑是非法的:
root.t1.* root.t1.**.t2 root.t1*.t2.t3
示例
根據(jù)本文中描述的 樣例數(shù)據(jù) 內(nèi)容,IoTDB 的樣例數(shù)據(jù)可能同時屬于 ln, sgcc 等不同發(fā)電集團(tuán),不同的發(fā)電集團(tuán)不希望其他發(fā)電集團(tuán)獲取自己的數(shù)據(jù)庫數(shù)據(jù),因此我們需要將不同的數(shù)據(jù)在集團(tuán)層進(jìn)行權(quán)限隔離。
創(chuàng)建用戶
使用 CREATE USER <userName> <password> 創(chuàng)建用戶。例如,我們可以使用具有所有權(quán)限的root用戶為 ln 和 sgcc 集團(tuán)創(chuàng)建兩個用戶角色,名為 ln_write_user, sgcc_write_user,密碼均為 write_pwd。建議使用反引號(`)包裹用戶名。SQL 語句為:
CREATE USER `ln_write_user` 'write_pwd'
CREATE USER `sgcc_write_user` 'write_pwd'此時使用展示用戶的 SQL 語句:
LIST USER我們可以看到這兩個已經(jīng)被創(chuàng)建的用戶,結(jié)果如下:
IoTDB> CREATE USER `ln_write_user` 'write_pwd'
Msg: The statement is executed successfully.
IoTDB> CREATE USER `sgcc_write_user` 'write_pwd'
Msg: The statement is executed successfully.
IoTDB> LIST USER;
+---------------+
| user|
+---------------+
| ln_write_user|
| root|
|sgcc_write_user|
+---------------+
Total line number = 3
It costs 0.012s賦予用戶權(quán)限
此時,雖然兩個用戶已經(jīng)創(chuàng)建,但是他們不具有任何權(quán)限,因此他們并不能對數(shù)據(jù)庫進(jìn)行操作,例如我們使用 ln_write_user 用戶對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行寫入,SQL 語句為:
INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)此時,系統(tǒng)不允許用戶進(jìn)行此操作,會提示錯誤:
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)
Msg: 803: No permissions for this operation, please add privilege WRITE_DATA on [root.ln.wf01.wt01.status]現(xiàn)在,我們用 root 用戶分別賦予他們向?qū)?yīng)路徑的寫入權(quán)限.
我們使用 GRANT <PRIVILEGES> ON <PATHS> TO USER <username> 語句賦予用戶權(quán)限,例如:
GRANT WRITE_DATA ON root.ln.** TO USER `ln_write_user`
GRANT WRITE_DATA ON root.sgcc1.**, root.sgcc2.** TO USER `sgcc_write_user`執(zhí)行狀態(tài)如下所示:
IoTDB> GRANT WRITE_DATA ON root.ln.** TO USER `ln_write_user`
Msg: The statement is executed successfully.
IoTDB> GRANT WRITE_DATA ON root.sgcc1.**, root.sgcc2.** TO USER `sgcc_write_user`
Msg: The statement is executed successfully.接著使用ln_write_user再嘗試寫入數(shù)據(jù)
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp, status) values(1509465600000, true)
Msg: The statement is executed successfully.撤銷用戶權(quán)限
授予用戶權(quán)限后,我們可以使用 REVOKE <PRIVILEGES> ON <PATHS> FROM USER <USERNAME>來撤銷已經(jīng)授予用戶的權(quán)限。例如,用root用戶撤銷ln_write_user和sgcc_write_user的權(quán)限:
REVOKE WRITE_DATA ON root.ln.** FROM USER `ln_write_user`
REVOKE WRITE_DATA ON root.sgcc1.**, root.sgcc2.** FROM USER `sgcc_write_user`執(zhí)行狀態(tài)如下所示:
IoTDB> REVOKE WRITE_DATA ON root.ln.** FROM USER `ln_write_user`
Msg: The statement is executed successfully.
IoTDB> REVOKE WRITE_DATA ON root.sgcc1.**, root.sgcc2.** FROM USER `sgcc_write_user`
Msg: The statement is executed successfully.撤銷權(quán)限后,ln_write_user就沒有向root.ln.**寫入數(shù)據(jù)的權(quán)限了。
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp, status) values(1509465600000, true)
Msg: 803: No permissions for this operation, please add privilege WRITE_DATA on [root.ln.wf01.wt01.status]其他說明
角色是權(quán)限的集合,而權(quán)限和角色都是用戶的一種屬性。即一個角色可以擁有若干權(quán)限。一個用戶可以擁有若干角色與權(quán)限(稱為用戶自身權(quán)限)。
目前在 IoTDB 中并不存在相互沖突的權(quán)限,因此一個用戶真正具有的權(quán)限是用戶自身權(quán)限與其所有的角色的權(quán)限的并集。即要判定用戶是否能執(zhí)行某一項(xiàng)操作,就要看用戶自身權(quán)限或用戶的角色的所有權(quán)限中是否有一條允許了該操作。用戶自身權(quán)限與其角色權(quán)限,他的多個角色的權(quán)限之間可能存在相同的權(quán)限,但這并不會產(chǎn)生影響。
需要注意的是:如果一個用戶自身有某種權(quán)限(對應(yīng)操作 A),而他的某個角色有相同的權(quán)限。那么如果僅從該用戶撤銷該權(quán)限無法達(dá)到禁止該用戶執(zhí)行操作 A 的目的,還需要從這個角色中也撤銷對應(yīng)的權(quán)限,或者從這個用戶將該角色撤銷。同樣,如果僅從上述角色將權(quán)限撤銷,也不能禁止該用戶執(zhí)行操作 A。
同時,對角色的修改會立即反映到所有擁有該角色的用戶上,例如對角色增加某種權(quán)限將立即使所有擁有該角色的用戶都擁有對應(yīng)權(quán)限,刪除某種權(quán)限也將使對應(yīng)用戶失去該權(quán)限(除非用戶本身有該權(quán)限)。
升級說明
在 1.3 版本前,權(quán)限類型較多,在這一版實(shí)現(xiàn)中,權(quán)限類型做了精簡,并且添加了對權(quán)限路徑的約束。
數(shù)據(jù)庫 1.3 版本的權(quán)限路徑必須為全路徑或者以雙通配符結(jié)尾的匹配路徑,在系統(tǒng)升級時,會自動轉(zhuǎn)換不合法的權(quán)限路徑和權(quán)限類型。
路徑上首個非法節(jié)點(diǎn)會被替換為**, 不在支持的權(quán)限類型也會映射到當(dāng)前系統(tǒng)支持的權(quán)限上。
例如:
| 權(quán)限類型 | 權(quán)限路徑 | 映射之后的權(quán)限類型 | 權(quán)限路徑 |
|---|---|---|---|
| CREATE_DATBASE | root.db.t1.* | MANAGE_DATABASE | root.** |
| INSERT_TIMESERIES | root.db.t2.*.t3 | WRITE_DATA | root.db.t2.** |
| CREATE_TIMESERIES | root.db.t2*c.t3 | WRITE_SCHEMA | root.db.** |
| LIST_ROLE | root.** | (忽略) |
新舊版本的權(quán)限類型對照可以參照下面的表格(--IGNORE 表示新版本忽略該權(quán)限):
| 權(quán)限名稱 | 是否路徑相關(guān) | 新權(quán)限名稱 | 是否路徑相關(guān) |
|---|---|---|---|
| CREATE_DATABASE | 是 | MANAGE_DATABASE | 否 |
| INSERT_TIMESERIES | 是 | WRITE_DATA | 是 |
| UPDATE_TIMESERIES | 是 | WRITE_DATA | 是 |
| READ_TIMESERIES | 是 | READ_DATA | 是 |
| CREATE_TIMESERIES | 是 | WRITE_SCHEMA | 是 |
| DELETE_TIMESERIES | 是 | WRITE_SCHEMA | 是 |
| CREATE_USER | 否 | MANAGE_USER | 否 |
| DELETE_USER | 否 | MANAGE_USER | 否 |
| MODIFY_PASSWORD | 否 | -- IGNORE | |
| LIST_USER | 否 | -- IGNORE | |
| GRANT_USER_PRIVILEGE | 否 | -- IGNORE | |
| REVOKE_USER_PRIVILEGE | 否 | -- IGNORE | |
| GRANT_USER_ROLE | 否 | MANAGE_ROLE | 否 |
| REVOKE_USER_ROLE | 否 | MANAGE_ROLE | 否 |
| CREATE_ROLE | 否 | MANAGE_ROLE | 否 |
| DELETE_ROLE | 否 | MANAGE_ROLE | 否 |
| LIST_ROLE | 否 | -- IGNORE | |
| GRANT_ROLE_PRIVILEGE | 否 | -- IGNORE | |
| REVOKE_ROLE_PRIVILEGE | 否 | -- IGNORE | |
| CREATE_FUNCTION | 否 | USE_UDF | 否 |
| DROP_FUNCTION | 否 | USE_UDF | 否 |
| CREATE_TRIGGER | 是 | USE_TRIGGER | 否 |
| DROP_TRIGGER | 是 | USE_TRIGGER | 否 |
| START_TRIGGER | 是 | USE_TRIGGER | 否 |
| STOP_TRIGGER | 是 | USE_TRIGGER | 否 |
| CREATE_CONTINUOUS_QUERY | 否 | USE_CQ | 否 |
| DROP_CONTINUOUS_QUERY | 否 | USE_CQ | 否 |
| ALL | 否 | All privilegs | |
| DELETE_DATABASE | 是 | MANAGE_DATABASE | 否 |
| ALTER_TIMESERIES | 是 | WRITE_SCHEMA | 是 |
| UPDATE_TEMPLATE | 否 | -- IGNORE | |
| READ_TEMPLATE | 否 | -- IGNORE | |
| APPLY_TEMPLATE | 是 | WRITE_SCHEMA | 是 |
| READ_TEMPLATE_APPLICATION | 否 | -- IGNORE | |
| SHOW_CONTINUOUS_QUERIES | 否 | -- IGNORE | |
| CREATE_PIPEPLUGIN | 否 | USE_PIPE | 否 |
| DROP_PIPEPLUGINS | 否 | USE_PIPE | 否 |
| SHOW_PIPEPLUGINS | 否 | -- IGNORE | |
| CREATE_PIPE | 否 | USE_PIPE | 否 |
| START_PIPE | 否 | USE_PIPE | 否 |
| STOP_PIPE | 否 | USE_PIPE | 否 |
| DROP_PIPE | 否 | USE_PIPE | 否 |
| SHOW_PIPES | 否 | -- IGNORE | |
| CREATE_VIEW | 是 | WRITE_SCHEMA | 是 |
| ALTER_VIEW | 是 | WRITE_SCHEMA | 是 |
| RENAME_VIEW | 是 | WRITE_SCHEMA | 是 |
| DELETE_VIEW | 是 | WRITE_SCHEMA | 是 |