This is an automated email from the ASF dual-hosted git repository. luzhijing pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new bc48cbff83 [doc](auth)auth doc (#17358) bc48cbff83 is described below commit bc48cbff8321e6aade5c9bfc4b506431fea25c52 Author: zhangdong <493738...@qq.com> AuthorDate: Tue Mar 7 08:05:09 2023 +0800 [doc](auth)auth doc (#17358) * auth doc * auth en doc * add note --- .../admin-manual/privilege-ldap/user-privilege.md | 64 +++++++++++++++++---- .../Account-Management-Statements/ALTER-USER.md | 66 ++++++++-------------- .../Account-Management-Statements/GRANT.md | 19 ++++++- .../Account-Management-Statements/REVOKE.md | 18 +++++- .../admin-manual/privilege-ldap/user-privilege.md | 64 +++++++++++++++++---- .../Account-Management-Statements/ALTER-USER.md | 62 +++++++------------- .../Account-Management-Statements/GRANT.md | 19 ++++++- .../Account-Management-Statements/REVOKE.md | 19 ++++++- 8 files changed, 223 insertions(+), 108 deletions(-) diff --git a/docs/en/docs/admin-manual/privilege-ldap/user-privilege.md b/docs/en/docs/admin-manual/privilege-ldap/user-privilege.md index 097ccd413c..6409d792b5 100644 --- a/docs/en/docs/admin-manual/privilege-ldap/user-privilege.md +++ b/docs/en/docs/admin-manual/privilege-ldap/user-privilege.md @@ -50,18 +50,62 @@ Doris's new privilege management system refers to Mysql's privilege management m User attributes include, but are not limited to, the maximum number of user connections, import cluster configuration, and so on. +## Permission framework + +Doris permission design is based on RBAC (Role-Based Access Control) permission management model. Users are associated with roles, roles and permissions, and users are associated with permissions indirectly through roles. + +When a role is deleted, the user automatically loses all permissions of the role. + +When a user and a role are disassociated, the user automatically loses all permissions of the role. + +When the role's permissions are added or deleted, the user's permissions will also change. + +``` +┌────────┐ ┌────────┐ ┌────────┐ +│ user1 ├────┬───► role1 ├────┬────► priv1 │ +└────────┘ │ └────────┘ │ └────────┘ + │ │ + │ │ + │ ┌────────┐ │ + │ │ role2 ├────┤ +┌────────┐ │ └────────┘ │ ┌────────┐ +│ user2 ├────┘ │ ┌─► priv2 │ +└────────┘ │ │ └────────┘ + ┌────────┐ │ │ + ┌──────► role3 ├────┘ │ + │ └────────┘ │ + │ │ + │ │ +┌────────┐ │ ┌────────┐ │ ┌────────┐ +│ userN ├─┴──────► roleN ├───────┴─► privN │ +└────────┘ └────────┘ └────────┘ +``` + +As shown in the figure above: + +Both user1 and user2 have priv1 permissions through role1. + +UserN has priv1 permissions through role3, priv2 and privN permissions through roleN, so userN has priv1, priv2 and privN permissions at the same time. + +In order to facilitate user operation, users can be authorized directly. In the underlying implementation, a default role dedicated to the user is created for each user. When authorizing a user, it is actually authorizing the user's default role. + +The default role cannot be deleted or assigned to others. When a user is deleted, the default role will also be deleted automatically. + ## Supported operations -1. Create users: CREATE USER -2. Delete users: DROP USER -3. Authorization: GRANT -4. Withdrawal: REVOKE -5. Create role: CREATE ROLE -6. Delete Roles: DROP ROLE -7. View current user privileges: SHOW GRANTS -8. View all user privilegesSHOW ALL GRANTS; -9. View the created roles: SHOW ROLES -10. View user attributes: SHOW PROPERTY +1. Create users: [CREATE USER](../../sql-manual/sql-reference/Account-Management-Statements/CREATE-USER.md) +2. Alter users: [ALTER USER](../../sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md) +3. Delete users: [DROP USER](../../sql-manual/sql-reference/Account-Management-Statements/DROP-USER.md) +4. Authorization/Assign roles: [GRANT](../../sql-manual/sql-reference/Account-Management-Statements/GRANT.md) +5. Withdrawal/REVOKE roles: [REVOKE](../../sql-manual/sql-reference/Account-Management-Statements/REVOKE.md) +6. Create role: [CREATE ROLE](../../sql-manual/sql-reference/Account-Management-Statements/CREATE-ROLE.md) +7. Delete roles: [DROP ROLE](../../sql-manual/sql-reference/Account-Management-Statements/DROP-ROLE.md) +8. View current user privileges: [SHOW GRANTS](../../sql-manual/sql-reference/Show-Statements/SHOW-GRANTS.md) +9. View all user privileges: [SHOW ALL GRANTS](../../sql-manual/sql-reference/Show-Statements/SHOW-GRANTS.md) +10. View the created roles: [SHOW ROLES](../../sql-manual/sql-reference/Show-Statements/SHOW-ROLES.md) +11. Set user properties: [SET PROPERTY](../../sql-manual/sql-reference/Account-Management-Statements/SET-PROPERTY.md) +12. View user properties: [SHOW PROPERTY](../../sql-manual/sql-reference/Show-Statements/SHOW-PROPERTY.md) +13. Change password :[SET PASSWORD](../../sql-manual/sql-reference/Account-Management-Statements/SET-PASSWORD.md) For detailed help with the above commands, you can use help + command to get help after connecting Doris through the MySQL client. For example `HELP CREATE USER`. diff --git a/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md b/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md index 56a7ab3035..8fa227897f 100644 --- a/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md +++ b/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md @@ -32,11 +32,14 @@ ALTER USER ### Description -The ALTER USER command is used to modify a user's account attributes, including roles, passwords, and password policies, etc. +The ALTER USER command is used to modify a user's account attributes, including passwords, and password policies, etc. + +>Note that. +> +>This command give over supports modifying user roles. Please use [GRANT](./GRANT.md) and [REVOKE](./REVOKE.md) for related operations ```sql ALTER USER [IF EXISTS] user_identity [IDENTIFIED BY 'password'] -[DEFAULT ROLE 'role_name'] [password_policy] user_identity: @@ -58,37 +61,30 @@ About `user_identity` and `password_policy`, Please refer to `CREATE USER`. In an ALTER USER command, only one of the following account attributes can be modified at the same time: 1. Change password -2. Modify the role -3. Modify `PASSWORD_HISTORY` -4. Modify `PASSWORD_EXPIRE` -5. Modify `FAILED_LOGIN_ATTEMPTS` and `PASSWORD_LOCK_TIME` -6. Unlock users +2. Modify `PASSWORD_HISTORY` +3. Modify `PASSWORD_EXPIRE` +4. Modify `FAILED_LOGIN_ATTEMPTS` and `PASSWORD_LOCK_TIME` +5. Unlock users ### Example 1. Change the user's password - ``` - ALTER USER jack@‘%’ IDENTIFIED BY "12345"; - ``` - -2. Modify the role of the user - - ``` - ALTER USER jack@'192.168.%' DEFAULT ROLE "role2"; - ``` + ``` + ALTER USER jack@‘%’ IDENTIFIED BY "12345"; + ``` -3. Modify the user's password policy +2. Modify the user's password policy - ``` - ALTER USER jack@'%' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY; - ``` + ``` + ALTER USER jack@'%' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY; + ``` -4. Unlock a user +3. Unlock a user - ``` - ALTER USER jack@'%' ACCOUNT_UNLOCK - ``` + ``` + ALTER USER jack@'%' ACCOUNT_UNLOCK + ``` ### Keywords @@ -96,24 +92,8 @@ In an ALTER USER command, only one of the following account attributes can be mo ### Best Practice -1. Modify the role - - If the user previously belonged to role A, when the user role is modified, all permissions corresponding to role A on the user will be revoked first, and then all permissions corresponding to the new role will be granted. - - Note that if the user has been granted a certain permission before, and role A also includes this permission, after modifying the role, the individually granted permission will also be revoked. - - for example: - - Suppose roleA has the privilege: `select_priv on db1.*`, create user user1 and set the role to roleA. - - Then give the user this privilege separately: `GRANT select_priv, load_priv on db1.* to user1` - - roleB has the privilege `alter_priv on db1.tbl1`. At this time, modify the role of user1 to B. - - Then finally user1 has `alter_priv on db1.tbl1` and `load_priv on db1.*` permissions. - -2. Modify the password policy +1. Modify the password policy - 1. Modify `PASSWORD_EXPIRE` will reset the timing of password expiration time. + 1. Modify `PASSWORD_EXPIRE` will reset the timing of password expiration time. - 2. Modify `FAILED_LOGIN_ATTEMPTS` or `PASSWORD_LOCK_TIME` will unlock the user. \ No newline at end of file + 2. Modify `FAILED_LOGIN_ATTEMPTS` or `PASSWORD_LOCK_TIME` will unlock the user. \ No newline at end of file diff --git a/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md b/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md index 05dff1c354..859cf18057 100644 --- a/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md +++ b/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md @@ -32,12 +32,21 @@ GRANT ### Description -The GRANT command is used to grant the specified user or role specified permissions +The GRANT command has the following functions: + +1. Grant the specified permissions to a user or role. +2. Grant the specified role to a user. + +>Note that. +> +>"Grant the specified role to the user" is not supported in the current version ```sql GRANT privilege_list ON priv_level TO user_identity [ROLE role_name] GRANT privilege_list ON RESOURCE resource_name TO user_identity [ROLE role_name] + +GRANT role_list TO user_identity ```` privilege_list is a list of privileges to be granted, separated by commas. Currently Doris supports the following permissions: @@ -83,6 +92,8 @@ user_identity: You can also assign permissions to the specified ROLE, if the specified ROLE does not exist, it will be created automatically. +role_list is the list of roles to be assigned, separated by commas,the specified role must exist. + ### Example 1. Grant permissions to all catalog and databases and tables to the user @@ -121,6 +132,12 @@ user_identity: GRANT USAGE_PRIV ON RESOURCE 'spark_resource' TO ROLE 'my_role'; ```` +7. Grant the specified role to a user + + ```sql + GRANT 'role1','role2' TO 'jack'@'%'; + ``` + ### Keywords GRANT diff --git a/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md b/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md index 1b80161cf8..a17f28e906 100644 --- a/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md +++ b/docs/en/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md @@ -32,12 +32,21 @@ REVOKE ### Description -The REVOKE command is used to revoke the privileges assigned by the specified user or role. +The REVOKE command has the following functions: + +1. Revoke the specified permission of a user or a role. +2. Revoke the specified role previously granted to a user. + +>Note that. +> +>"Revoke the specified role previously granted to a user" is not supported in the current version ```sql REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name] REVOKE privilege_list ON RESOURCE resource_name FROM user_identity [ROLE role_name] + +REVOKE role_list FROM user_identity ```` user_identity: @@ -46,6 +55,8 @@ The user_identity syntax here is the same as CREATE USER. And must be a user_ide It is also possible to revoke the permissions of the specified ROLE, the executed ROLE must exist. +role_list is the list of roles to be revoked, separated by commas. The specified roles must exist. + ### Example 1. Revoke the permission of user jack database testDb @@ -59,6 +70,11 @@ It is also possible to revoke the permissions of the specified ROLE, the execute ```sql REVOKE USAGE_PRIV ON RESOURCE 'spark_resource' FROM 'jack'@'192.%'; ```` +3. Revoke the roles role1 and role2 previously granted to jack + + ```sql + REVOKE 'role1','role2' FROM 'jack'@'192.%'; + ``` ### Keywords diff --git a/docs/zh-CN/docs/admin-manual/privilege-ldap/user-privilege.md b/docs/zh-CN/docs/admin-manual/privilege-ldap/user-privilege.md index 82ea81be46..67d18654fc 100644 --- a/docs/zh-CN/docs/admin-manual/privilege-ldap/user-privilege.md +++ b/docs/zh-CN/docs/admin-manual/privilege-ldap/user-privilege.md @@ -50,18 +50,62 @@ Doris 新的权限管理系统参照了 Mysql 的权限管理机制,做到了 用户属性包括但不限于: 用户最大连接数、导入集群配置等等。 +## 权限框架 + +Doris权限设计基于RBAC(Role-Based Access Control)的权限管理模型,用户和角色关联,角色和权限关联,用户通过角色间接和权限关联。 + +当角色被删除时,用户自动失去该角色的所有权限。 + +当用户和角色取消关联,用户自动失去角色的所有权限。 + +当角色的权限被增加或删除,用户的权限也会随之变更。 + +``` +┌────────┐ ┌────────┐ ┌────────┐ +│ user1 ├────┬───► role1 ├────┬────► priv1 │ +└────────┘ │ └────────┘ │ └────────┘ + │ │ + │ │ + │ ┌────────┐ │ + │ │ role2 ├────┤ +┌────────┐ │ └────────┘ │ ┌────────┐ +│ user2 ├────┘ │ ┌─► priv2 │ +└────────┘ │ │ └────────┘ + ┌────────┐ │ │ + ┌──────► role3 ├────┘ │ + │ └────────┘ │ + │ │ + │ │ +┌────────┐ │ ┌────────┐ │ ┌────────┐ +│ userN ├─┴──────► roleN ├───────┴─► privN │ +└────────┘ └────────┘ └────────┘ +``` + +如上图所示: + +user1和user2都是通过role1拥有了priv1的权限。 + +userN通过role3拥有了priv1的权限,通过roleN拥有了priv2和privN的权限,因此userN同时拥有priv1,priv2和privN的权限。 + +为了方便用户操作,是可以直接给用户授权的,底层实现上,是为每个用户创建了一个专属于该用户的默认角色,当给用户授权时,实际上是在给该用户的默认角色授权。 + +默认角色不能被删除,不能被分配给其他人,删除用户时,默认角色也自动删除。 + ## 支持的操作 -1. 创建用户:CREATE USER -2. 删除用户:DROP USER -3. 授权:GRANT -4. 撤权:REVOKE -5. 创建角色:CREATE ROLE -6. 删除角色:DROP ROLE -7. 查看当前用户权限:SHOW GRANTS -8. 查看所有用户权限:SHOW ALL GRANTS -9. 查看已创建的角色:SHOW ROLES -10. 查看用户属性:SHOW PROPERTY +1. 创建用户:[CREATE USER](../../sql-manual/sql-reference/Account-Management-Statements/CREATE-USER.md) +2. 修改用户:[ALTER USER](../../sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md) +3. 删除用户:[DROP USER](../../sql-manual/sql-reference/Account-Management-Statements/DROP-USER.md) +4. 授权/分配角色:[GRANT](../../sql-manual/sql-reference/Account-Management-Statements/GRANT.md) +5. 撤权/撤销角色:[REVOKE](../../sql-manual/sql-reference/Account-Management-Statements/REVOKE.md) +6. 创建角色:[CREATE ROLE](../../sql-manual/sql-reference/Account-Management-Statements/CREATE-ROLE.md) +7. 删除角色:[DROP ROLE](../../sql-manual/sql-reference/Account-Management-Statements/DROP-ROLE.md) +8. 查看当前用户权限和角色:[SHOW GRANTS](../../sql-manual/sql-reference/Show-Statements/SHOW-GRANTS.md) +9. 查看所有用户权限和角色:[SHOW ALL GRANTS](../../sql-manual/sql-reference/Show-Statements/SHOW-GRANTS.md) +10. 查看已创建的角色:[SHOW ROLES](../../sql-manual/sql-reference/Show-Statements/SHOW-ROLES.md) +11. 设置用户属性: [SET PROPERTY](../../sql-manual/sql-reference/Account-Management-Statements/SET-PROPERTY.md) +12. 查看用户属性:[SHOW PROPERTY](../../sql-manual/sql-reference/Show-Statements/SHOW-PROPERTY.md) +13. 修改密码:[SET PASSWORD](../../sql-manual/sql-reference/Account-Management-Statements/SET-PASSWORD.md) 关于以上命令的详细帮助,可以通过 mysql 客户端连接 Doris 后,使用 help + command 获取帮助。如 `HELP CREATE USER`。 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md b/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md index 313a6eb678..199246ec0a 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/ALTER-USER.md @@ -32,11 +32,14 @@ ALTER USER ### Description -ALTER USER 命令用于修改一个用户的账户属性,包括角色、密码、和密码策略等 +ALTER USER 命令用于修改一个用户的账户属性,包括密码、和密码策略等 + +>注意: +> +>此命令不再支持修改用户角色,相关操作请使用[GRANT](./GRANT.md)和[REVOKE](./REVOKE.md) ```sql ALTER USER [IF EXISTS] user_identity [IDENTIFIED BY 'password'] -[DEFAULT ROLE 'role_name'] [password_policy] user_identity: @@ -58,37 +61,30 @@ password_policy: 在一个 ALTER USER 命令中,只能同时对以下账户属性中的一项进行修改: 1. 修改密码 -2. 修改角色 -3. 修改 `PASSWORD_HISTORY` -4. 修改 `PASSWORD_EXPIRE` -5. 修改 `FAILED_LOGIN_ATTEMPTS` 和 `PASSWORD_LOCK_TIME` -6. 解锁用户 +2. 修改 `PASSWORD_HISTORY` +3. 修改 `PASSWORD_EXPIRE` +4. 修改 `FAILED_LOGIN_ATTEMPTS` 和 `PASSWORD_LOCK_TIME` +5. 解锁用户 ### Example 1. 修改用户的密码 - ``` - ALTER USER jack@‘%’ IDENTIFIED BY "12345"; - ``` - -2. 修改用户的角色 - - ``` - ALTER USER jack@'192.168.%' DEFAULT ROLE "role2"; - ``` + ``` + ALTER USER jack@‘%’ IDENTIFIED BY "12345"; + ``` -3. 修改用户的密码策略 +2. 修改用户的密码策略 - ``` - ALTER USER jack@'%' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY; - ``` + ``` + ALTER USER jack@'%' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY; + ``` -4. 解锁一个用户 +3. 解锁一个用户 - ``` - ALTER USER jack@'%' ACCOUNT_UNLOCK - ``` + ``` + ALTER USER jack@'%' ACCOUNT_UNLOCK + ``` ### Keywords @@ -96,23 +92,7 @@ password_policy: ### Best Practice -1. 修改角色 - - 如果用户之前属于角色A,则在修改用户角色时,会首先撤销该用户上,角色A对应的所有权限,然后再赋予新角色对应的所有权限。 - - 注意,如果之前单独赋予过该用户某个权限,而角色A也包含这个权限,则在修改角色后,单独赋予的权限也会被撤销。 - - 举例说明: - - 假设 roleA 拥有权限:`select_priv on db1.*`,同时创建用户 user1 并设置角色为 roleA。 - - 之后单独赋予用户该权限:`GRANT select_priv, load_priv on db1.* to user1` - - roleB 拥有权限 `alter_priv on db1.tbl1`。此时修改 user1 的角色为 B。 - - 则最终 user1 拥有 `alter_priv on db1.tbl1` 和 `load_priv on db1.*` 的权限。 - -2. 修改密码策略 +1. 修改密码策略 1. 修改 `PASSWORD_EXPIRE` 会重置密码过期时间的计时。 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md b/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md index bc9167db51..bc3ed108d6 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/GRANT.md @@ -32,12 +32,21 @@ GRANT ### Description -GRANT 命令用于赋予指定用户或角色指定的权限 +GRANT 命令有如下功能: + +1. 将指定的权限授予某用户或角色。 +2. 将指定角色授予某用户。 + +>注意: +> +>当前版本尚未支持"将指定角色授予用户" ```sql GRANT privilege_list ON priv_level TO user_identity [ROLE role_name] GRANT privilege_list ON RESOURCE resource_name TO user_identity [ROLE role_name] + +GRANT role_list TO user_identity ``` privilege_list 是需要赋予的权限列表,以逗号分隔。当前 Doris 支持如下权限: @@ -83,6 +92,8 @@ user_identity: 也可以将权限赋予指定的 ROLE,如果指定的 ROLE 不存在,则会自动创建。 +role_list 是需要赋予的角色列表,以逗号分隔,指定的角色必须存在。 + ### Example 1. 授予所有catalog和库表的权限给用户 @@ -121,6 +132,12 @@ user_identity: GRANT USAGE_PRIV ON RESOURCE 'spark_resource' TO ROLE 'my_role'; ``` +7. 将指定角色授予某用户 + + ```sql + GRANT 'role1','role2' TO 'jack'@'%'; + ``` + ### Keywords ``` diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md b/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md index 26fb4e824e..2a3f93984e 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Account-Management-Statements/REVOKE.md @@ -32,12 +32,21 @@ REVOKE ### Description -REVOKE 命令用于撤销指定用户或角色指定的权限。 +REVOKE 命令有如下功能: + +1. 撤销某用户或某角色的指定权限。 +2. 撤销先前授予某用户的指定角色。 + +>注意: +> +>当前版本尚未支持"撤销先前授予某用户的指定角色" ```sql REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name] REVOKE privilege_list ON RESOURCE resource_name FROM user_identity [ROLE role_name] + +REVOKE role_list FROM user_identity ``` user_identity: @@ -46,6 +55,8 @@ user_identity: 也可以撤销指定的 ROLE 的权限,执行的 ROLE 必须存在。 +role_list 是需要撤销的角色列表,以逗号分隔,指定的角色必须存在。 + ### Example 1. 撤销用户 jack 数据库 testDb 的权限 @@ -60,6 +71,12 @@ user_identity: REVOKE USAGE_PRIV ON RESOURCE 'spark_resource' FROM 'jack'@'192.%'; ``` +3. 撤销先前授予jack的角色role1和role2 + + ```sql + REVOKE 'role1','role2' FROM 'jack'@'192.%'; + ``` + ### Keywords REVOKE --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org