Authority Management

    1. user_identity

      In a permission system, a user is identified as a User Identity. User ID consists of two parts: username and userhost. Username is a user name, which is composed of English upper and lower case. Userhost represents the IP from which the user link comes. User_identity is presented as username@’userhost’, representing the username from userhost.

      Another expression of user_identity is username@[‘domain’], where domain is the domain name, which can be resolved into a set of IPS by DNS . The final expression is a set of username@’userhost’, so we use username@’userhost’to represent it.

    2. Privilege

      The objects of permissions are nodes, catalogs, databases or tables. Different permissions represent different operating permissions.

    3. Role

      Doris can create custom named roles. Roles can be seen as a set of permissions. When a newly created user can be assigned a role, the role’s permissions are automatically granted. Subsequent changes in the role’s permissions will also be reflected in all user permissions that belong to the role.

    4. user_property

      User attributes are directly attached to a user, not to a user identity. That is, both cmy@’192.%’and cmy@[‘domain’] have the same set of user attributes, which belong to user cmy, not cmy@’192.%’ or cmy@[‘domain’].

      User attributes include, but are not limited to, the maximum number of user connections, import cluster configuration, and so on.

    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

    For detailed help with the above commands, you can use help + command to get help after connecting Doris through the MySQL client. For example .

    Doris currently supports the following permissions

    1. Node_priv

      Nodes change permissions. Including FE, BE, BROKER node addition, deletion, offline operations. Currently, this permission can only be granted to Root users.

      The root user has this permission by default.

      Users who have both Grant_priv and Node_priv can grant this privilege to other users.

      This permission can only be granted to the Global level.

    2. Grant_priv

      Permissions change permissions. Allow the execution of operations including authorization, revocation, add/delete/change user/role, etc.

      However, a user with this permission can not grant node_priv permission to other users, unless the user itself has node_priv permission.

    3. Select_priv

      Read-only access to databases and tables.

    4. Load_priv

      Write permissions to databases and tables. Including Load, Insert, Delete and so on.

    5. Alter_priv

      Change permissions on databases and tables. It includes renaming libraries/tables, adding/deleting/changing columns, and adding/deleting partitions.

    6. The right to create databases, tables, and views.

    7. Drop_priv

      Delete permissions for databases, tables, and views.

    Permission hierarchy

    At the same time, according to the scope of application of permissions, we divide them into four levels:

    1. GLOBAL LEVEL: Global permissions. That is, permissions on *.*.* granted by GRANT statements. The granted permissions apply to any table in any database.
    2. CATALOG LEVEL: Catalog level permissions. That is, the permissions on ctl.*.* granted through the GRANT statement. The permissions granted apply to any library table in the specified Catalog.
    3. DATABASE LEVEL: Database-level permissions. That is, the permissions on ctl.db.* granted through the GRANT statement. The privileges granted apply to any table in the specified database.
    4. TABLE LEVEL: Table-level permissions. That is, the permissions on ctl.db.tbl granted through the GRANT statement. The privileges granted apply to the specified table in the specified database.

    ADMIN_PRIV and GRANT_PRIV have the authority of “grant authority” at the same time, which is more special. The operations related to these two privileges are described here one by one.

    1. CREATE USER

      • Users with ADMIN privileges, or GRANT privileges at the GLOBAL and DATABASE levels can create new users.
    2. DROP USER

      • Users with ADMIN authority or GRANT authority at the global level can drop users.
    3. CREATE/DROP ROLE

      • Users with ADMIN authority or GRANT authority at the global level can create or drop role.
    4. GRANT /REVOKE

      • Users with ADMIN or GLOBAL GRANT privileges can grant or revoke the privileges of any user.
      • Users with GRANT privileges at the DATABASE level can grant or revoke the privileges of any user on the specified database.
      • Users with GRANT privileges at TABLE level can grant or revoke the privileges of any user on the specified tables in the specified database.

    Some explanations

    1. When Doris initializes, the following users and roles are automatically created:

      1. Operator role: This role has Node_priv and Admin_priv, i.e. all permissions for Doris. In a subsequent upgrade version, we may restrict the role’s permissions to Node_priv, which is to grant only node change permissions. To meet some cloud deployment requirements.

      2. admin role: This role has Admin_priv, which is all permissions except for node changes.

      3. root@’%’: root user, which allows login from any node, with the role of operator.

      4. admin@’%’: admin user, allowing login from any node, role admin.

    2. It is not supported to delete or change the permissions of default created roles or users.

    3. The user of the operator role has one and only one user, that is, root. Users of admin roles can create multiple.

    4. Operational instructions for possible conflicts

      1. Conflict between domain name and ip:

        Assume that the following users are created:

        CREATE USER cmy@[‘domain’];

        And authorize:

        GRANT SELECT_PRIV ON *.* TO cmy@[‘domain’]

        The domain is resolved into two ips: IP1 and IP2

        Let’s assume that we have a separate authorization for cmy@’ip1’:

        GRANT ALTER_PRIV ON *.* TO cmy@’ip1’;

      2. duplicate IP conflicts:

        Assume that the following users are created:

        CREATE USER cmy@’%’ IDENTIFIED BY “12345”;

        CREATE USER cmy@’192.%’ IDENTIFIED BY “abcde”;

        In priority,’192.%’takes precedence over’%’, so when user CMY tries to login Doris with password ‘12345’ from 192.168.1.1, the machine will be rejected.

    5. Forget passwords

      If you forget your password and cannot log in to Doris, you can log in to Doris without a password using the following command on the machine where the Doris FE node is located:

      mysql-client -h 127.0.0.1 -P query_port -uroot

      After login, the password can be reset through the SET PASSWORD command.

    6. No user can reset the password of the root user except the root user himself.

    7. ADMIN_PRIV permissions can only be granted or revoked at the GLOBAL level.

    8. Having GRANT_PRIV at GLOBAL level is actually equivalent to having ADMIN_PRIV, because GRANT_PRIV at this level has the right to grant arbitrary permissions, please use it carefully.

    9. current_user() and user()

      Users can view current_user and user respectively by and SELECT user();. Where current_user indicates which identity the current user is passing through the authentication system, and user is the user’s current actual user_identity.

      For example, suppose the user user1@'192.%' is created, and then a user user1 from 192.168.10.1 is logged into the system. At this time, current_user is user1@'192.%', and user is user1@'192.168.10.1'.

      All privileges are given to a current_user, and the real user has all the privileges of the corresponding .

    10. Password Validation

      In version 1.2, the verification function of user password strength has been added. This feature is controlled by the global variable validate_password_policy. Defaults to NONE/0, i.e. password strength is not checked. If set to STRONG/2, the password must contain 3 items of “uppercase letters”, “lowercase letters”, “numbers” and “special characters”, and the length must be greater than or equal to 8.

    Here are some usage scenarios of Doris privilege system.

    1. Scene 1

      The users of Doris cluster are divided into Admin, RD and Client. Administrators have all the rights of the whole cluster, mainly responsible for cluster building, node management and so on. The development engineer is responsible for business modeling, including database building, data import and modification. Users access different databases and tables to get data.

      In this scenario, ADMIN or GRANT privileges can be granted to administrators. Give RD CREATE, DROP, ALTER, LOAD, SELECT permissions to any or specified database tables. Give Client SELECT permission to any or specified database table. At the same time, it can also simplify the authorization of multiple users by creating different roles.

    2. Scene 2

      There are multiple services in a cluster, and each business may use one or more data. Each business needs to manage its own users. In this scenario. Administrator users can create a user with GRANT privileges at the DATABASE level for each database. The user can only authorize the specified database for the user.

    More help