
# 创建具有ClickHouse权限的用户
#### 操作场景
该任务指导MRS集群管理员在Manager创建并设置ClickHouse的角色并绑定用户。ClickHouse角色可设置ClickHouse管理员权限以及ClickHouse表和数据库的读写权限。
#### 前提条件
- ClickHouse服务运行正常，Zookeeper服务运行正常。
- 用户在集群中创建数据库或者表时需使用ON CLUSTER语句，保证各个ClickHouse节点上数据库、表的元信息相同。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
ClickHouse赋权成功后，权限生效时间大约为1分钟。
 #### 添加ClickHouse角色
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"系统 \> 权限 \> 角色"，在"角色"界面单击"添加角色"按钮，进入添加角色页面。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724866689.png "点击放大")
   
   
3. 在添加角色界面输入"角色名称"，在配置资源权限处单击集群名称，进入服务列表页面，单击ClickHouse服务，进入ClickHouse权限资源页面。 
   根据业务需求确定是否要创建具有ClickHouse管理员权限的角色。
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - ClickHouse管理员权限为：除去对user/role的创建、删除和修改之外的所有数据库操作权限。
   
   - 对于用户和角色的管理，仅有ClickHouse的内置用户**clickhouse**具有权限。
    
   - 是，执行[4]。
   
   - 否，执行[5]。
   
   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907330.png "点击放大")
   
   
4. 勾选"ClickHouse管理员权限"，单击"确定"操作结束。
5. 单击"ClickHouse Scope"，进入ClickHouse数据库资源列表。勾选"创建"权限，则该角色将拥有该数据库下的创建（CREATE）权限。
   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724746813.png "点击放大")
   根据业务需求确定是否赋权。
   - 是，单击"确定"操作结束。
   
   - 否，执行[6]。
   
   
   
   
6. 单击"资源名称 \> *待操作的数据库资源名称* "，进入表、视图页面，根据业务需要，勾选"读"（SELECT权限）或者"写"（INSERT权限）权限，单击"确定"。
   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747598.png "点击放大")
   
   
 
#### 添加用户并将ClickHouse对应角色绑定到该用户
**当前集群已启用Kerberos认证：**
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"系统 \> 权限 \> 用户"，单击"添加用户"，进入添加用户页面。
3. "用户类型"选择"人机"，在"密码"和"确认密码"参数设置该用户对应的密码。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 用户名：添加的用户名不能包含字符"-"，否则会导致认证失败。
   
   - 密码：设置的密码不能携带"$"、"."、"#"特殊字符，否则会导致认证失败。
    
   
   
4. 在"角色"处单击"添加"，在弹框中选择具有ClickHouse权限的角色，单击"确定"添加到角色，单击"确定"完成操作。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907318.png "点击放大")
   
   
5. 登录ClickHouse客户端安装节点，使用新添加的用户及设置的密码连接ClickHouse服务。 
   - 执行以下命令，切换到客户端安装目录。 **cd /opt/** *客户端安装目录*
     
   
   - 执行以下命令配置环境变量。 **source bigdata_env**
     
   
   - 如果当前集群未启用Kerberos认证，执行如下命令连接ClickHouse服务端： **clickhouse client --host** *ClickHouse的实例IP* **--multiline** **--port** 9000 **--secure**
     
   
   - 如果当前集群已启用Kerberos认证，执行如下命令连接ClickHouse服务端。当前用户需要具有创建ClickHouse表的权限，具体请参见[添加ClickHouse角色]，为用户绑定对应角色。
     **kinit** *[2]* *中添加的用户*
     新建用户首次登录需要重新修改密码
     **clickhouse client --host** *ClickHouse的实例IP* **--user** *[2]* *中添加的用户* **--password** **--port** 9440 **--secure**
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
     ClickHouse的实例IP地址可登录集群FusionInsight Manager，然后选择"集群 \> 服务 \> ClickHouse \> 实例"，获取ClickHouseServer实例对应的业务IP地址。
     
   
   
   
   
**当前集群未启用Kerberos认证（默认无认证）：**
1. 登录Manager，选择"系统 \> 权限 \> 用户"，单击"添加用户"，进入添加用户页面。
2. "用户类型"选择"人机"，在"密码"和"确认新密码"参数设置该用户对应的密码。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 用户名：添加的用户名不能包含字符"-"，否则会导致认证失败。
   
   - 密码：设置的密码不能携带"$"、"."、"#"特殊字符，否则会导致认证失败。
    
   
   
3. 在"角色"处单击"添加"，在弹框中选择具有ClickHouse权限的角色，单击"确定"添加到角色，单击"确定"完成操作。
4. 登录ClickHouse客户端安装节点，使用新添加的用户及设置的密码连接ClickHouse服务。 
   1. 执行以下命令，切换到客户端安装目录。 **cd /opt/** *客户端安装目录*
      
   
   2. 执行以下命令配置环境变量。 **source bigdata_env**
      
   
   3. 执行以下命令连接ClickHouse服务。 **clickhouse client --host** *ClickHouse的实例IP* **--port** *ClickHouse的端口号* **--user** *用户名* 
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
      - 普通模式的内置用户为默认的default用户和默认的clickhouse用户（clickhouse用户具有管理员权限）。
      
      - 普通模式使用default用户或者clickhouse用户，需要参考[修改ClickHouse默认用户密码（MRS 3.3.0-LTS及之后版本）](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249272.html)修改默认用户的密码后使用。
        **clickhouse client --host** *ClickHouse的实例IP* **--user** **default** **或者clickhouse --password** **--port** *ClickHouse的端口号*
        *输入用户密码*
        
      
      - ClickHouse的实例IP地址可登录集群FusionInsight Manager，然后选择"集群 \> 服务 \> ClickHouse \> 实例"，获取ClickHouseServer实例对应的业务IP地址。
        
   
   
   
   
**当前集群未启用Kerberos认证（支持用户名和密码认证）：**
仅MRS 3.6.0-LTS.1及之后版本支持该功能。
1. 登录Manager，选择"系统 \> 权限 \> 用户"，单击"添加用户"，进入添加用户页面。
2. "用户类型"选择"机机"。
3. 在"角色"处单击"添加"，在弹框中选择具有ClickHouse权限的角色，单击"确定"添加到角色，单击"确定"完成操作。例如创建机机用户"testuser"。
4. 登录ClickHouse客户端安装节点，ClickHouse的默认用户"clickhouse"和密码连接ClickHouse服务。
   
   1. 执行以下命令，切换到客户端安装目录。 **cd /opt/** *客户端安装目录*
      
   
   2. 执行以下命令配置环境变量。 **source bigdata_env**
      
   
   3. 执行以下命令连接ClickHouse服务。 **clickhouse client --host** ClickHouse的实例IP **--port** 9440 **--user** **clickhouse** **--password** 
      *输入clickhouse用户的密码*
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
      - ClickHouse的实例IP地址可登录集群FusionInsight Manager，然后选择"集群 \> 服务 \> ClickHouse \> 实例"，获取ClickHouseServer实例对应的业务IP地址。
      
      - ClickHouse的默认用户"clickhouse"的密码，首次使用需要修改。具体请参考[修改ClickHouse默认用户密码（MRS 3.3.0-LTS及之后版本）](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249272.html)章节。如果已经修改了密码，则无需再次修改。
        
   
   
   
   
5. 执行如下命令设置新建的机机用户密码：
   
   **ALTER USER** *testuser* **on cluster default_cluster IDENTIFIED WITH** **pbkdf2_password** **BY** **'** *机机用户密码* **'** **;**
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 新设置的机机用户密码仅在ClickHouse中生效，在Manager侧还是无密码。
   
   - 默认设置的密码是永久不过期的，如果需要设置带过期时间的密码，使用如下命令： **ALTER USER testuser on cluster default_cluster IDENTIFIED WITH** **pbkdf2_password** **BY** **'** *机机用户密码* **'** **VALID UNTIL '2027-01-01 12:00:00** **';**
     
   
   - 设置的密码需要满足：最少8个字符、至少包含一个数字和一个特殊字符。
   
   - 密码过期后，登录报错仅提示用户名或者密码不对，需要用户自己根据过期时间判断是否为密码过期；并执行[4]和[5]来修改密码。
    
   
   
6. 执行以下命令连接ClickHouse服务。 
   **clickhouse client --host** ClickHouse的实例IP **--port** 9440 **--user** *testuser* **--password** 
   *输入[5]中为该用户设置的密码*
   
   
 
#### 异常场景下登录客户端操作赋权
ClickHouse集群默认每个节点上的表元信息是相同的，因此在Manager的权限管理页面上默认采集的是任意ClickHouse节点的表信息，如果有个别节点上创建DATABASE/TABLE时未使用ON CLUSTER语句，则权限操作可能无法展示该资源，不保证可以对其赋权。对于这样单个ClickHouse节点中的本地表，如果需要赋权，则可以通过后台客户端进行操作。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
以下操作，需要提前获取到需要赋权的角色、数据库或表名称、对应的ClickHouseServer实例所在的节点IP。
- ClickHouseServer的实例IP地址可登录集群FusionInsight Manager，然后选择"集群 \> 服务 \> ClickHouse \> 实例"，获取ClickHouseServer实例对应的业务IP地址。
- 系统域名：默认为hadoop.com。可登录集群FusionInsight Manager，单击"系统 \> 权限 \> 域和互信"，"本端域"参数值即为系统域名。在执行命令时改为小写。
 
1. 以root用户登录ClickHouseServer实例所在的节点。
2. 执行以下命令获取"clickhouse.keytab"文件路径。
   
   **ls ${BIGDATA_HOME}/FusionInsight_ClickHouse_\*/install/FusionInsight-ClickHouse-\*/clickhouse/keytab/clickhouse.keytab**
   
   
3. 以客户端安装用户，登录安装客户端的节点。
4. 执行以下命令，切换到客户端安装目录。 
   **cd /opt/client**
   
   
5. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
6. 执行如下命令使用客户端命令连接ClickHouseServer实例。 
   如果当前集群已启用Kerberos认证，执行以下命令：
   **clickhouse client --host** *ClickHouseServer实例所在节点IP* **--user clickhouse/hadoop.** *\<系统域名\>* **--password** *[2]* *中获取的clickhouse.keytab路径* **--port** *ClickHouse的端口号* **--secure**
   如果当前集群未启用Kerberos认证，执行以下命令：
   **clickhouse client --host** *ClickHouseServer实例所在节点IP* **--user clickhouse** **--port** *ClickHouse的端口号*
   
   
7. 对某DATABASE进行赋权操作，执行如下命令。 
   授权操作语法，其中*DATABASE* 为要操作的数据库名称，*role*为需要操作的角色。
   **GRANT** **\[** **ON CLUSTER** *cluster_name* **\]** *privilege* **ON** *{DATABASE\|TABLE}* **TO** *{user \| role}*
   例如，给用户testuser授予数据库t2的CREATE权限：
   **GRANT CREATE ON** *t2* **to** *testuser* **;**
   
   
8. 对TABLE/VIEW进行赋权操作，执行如下命令，其中*TABLE* 为要操作的表或视图名称，*user* 为需要操作的角色。
   
   对某数据库下的表赋予查询权限：
   **GRANT SELECT ON** *TABLE* **TO** *user* ***;***
   对某数据库下的表赋予写入权限：
   **GRANT INSERT ON** *TABLE* **TO** *user**;***
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   更多ClickHouse授权操作及详细权限说明可参考<https://clickhouse.com/docs/zh/sql-reference/statements/grant/>。
   
   
9. 执行如下命令，退出客户端。 
   **quit;**
   
   
 
