ClickHouse用户及权限管理
用户权限模型
ClickHouse用户权限管理实现了对集群中各个ClickHouse实例上用户、角色、权限的统一管理。通过Manager UI的权限管理模块进行创建用户、创建角色、绑定ClickHouse访问权限配置等操作,通过用户绑定角色的方式,实现用户权限控制。
管理资源:Clickhouse权限管理支持的资源如表1所示。
资源权限:ClickHouse支持的资源权限如表2所示。
前提条件
- ClickHouse服务运行正常,Zookeeper服务运行正常。
- 用户在集群中创建数据库或者表时需使用ON CLUSTER语句,保证各个ClickHouse节点上数据库、表的元信息相同。
ClickHouse赋权成功后,权限生效时间大约为1分钟。
添加ClickHouse角色
- 登录Manager,选择“系统 > 权限 > 角色”,在“角色”界面单击“添加角色”按钮,进入添加角色页面。
- 在添加角色界面输入“角色名称”,在配置资源权限处单击集群名称,进入服务列表页面,单击ClickHouse服务,进入ClickHouse权限资源页面。
根据业务需求确定是否要创建具有ClickHouse管理员权限的角色。
- ClickHouse管理员权限为:除去对user/role的创建、删除和修改之外的所有数据库操作权限。
- 对于用户和角色的管理,仅有ClickHouse的内置用户clickhouse具有权限。
- 勾选“ClickHouse管理员权限”,单击“确定”操作结束。
- 单击“ClickHouse Scope”,进入ClickHouse数据库资源列表。勾选“创建”权限,则该角色将拥有该数据库下的创建(CREATE)权限。
根据业务需求确定是否赋权。
- 是,单击“确定”操作结束。
- 否,执行5。
- 单击“资源名称 > 待操作的数据库资源名称”,进入表、视图页面,根据业务需要,勾选“读”(SELECT权限)或者“写”(INSERT权限)权限,单击“确定”。
添加用户并将ClickHouse对应角色绑定到该用户
- 登录Manager,选择“系统 > 权限 > 用户”,单击“添加用户”,进入添加用户页面。
- “用户类型”选择“人机”,在“密码”和“确认密码”参数设置该用户对应的密码。
- 用户名:添加的用户名不能包含字符“-”,否则会导致认证失败。
- 密码:设置的密码不能携带“$”、“.”、“#”特殊字符,否则会导致认证失败。
- 在“角色”处单击“添加”,在弹框中选择具有ClickHouse权限的角色,单击“确定”添加到角色,单击“确定”完成操作。
- 登录ClickHouse客户端安装节点,使用新添加的用户及设置的密码连接ClickHouse服务。
- 执行以下命令,切换到客户端安装目录。
- 执行以下命令配置环境变量。
- 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限,具体请参见添加ClickHouse角色,为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行本步骤。
如果是MRS 3.1.0版本集群,则需要先执行:export CLICKHOUSE_SECURITY_ENABLED=true
kinit 1中添加的用户
- 使用新添加的用户登录验证。
clickhouse client --host ClickHouse的实例IP --multiline --port ClickHouse的端口号 --secure
当前集群已启用Kerberos认证:
clickhouse client --host ClickHouse的实例IP --user 用户名 --password --port 9440 --secure
输入用户密码
普通模式的用户为默认的default用户,或者使用 ClickHouse社区开源能力添加管理用户。不能使用在FusionInsight Manager页面创建的用户。
异常场景下登录客户端操作赋权
ClickHouse集群默认每个节点上的表元信息是相同的,因此在Manager的权限管理页面上默认采集的是任意ClickHouse节点的表信息,如果有个别节点上创建DATABASE/TABLE时未使用ON CLUSTER语句,则权限操作可能无法展示该资源,不保证可以对其赋权。对于这样单个ClickHouse节点中的本地表,如果需要赋权,则可以通过后台客户端进行操作。
以下操作,需要提前获取到需要赋权的角色、数据库或表名称、对应的ClickHouseServer实例所在的节点IP。
- ClickHouseServer的实例IP地址可登录集群FusionInsight Manager,然后选择“集群 > 服务 > ClickHouse > 实例”,获取ClickHouseServer实例对应的业务IP地址。
- 系统域名:默认为hadoop.com。可登录集群FusionInsight Manager,单击“系统 > 权限 > 域和互信”,“本端域”参数值即为系统域名。在执行命令时改为小写。
- 以root用户登录ClickHouseServer实例所在的节点。
- 执行以下命令获取“clickhouse.keytab”文件路径。
ls ${BIGDATA_HOME}/FusionInsight_ClickHouse_*/install/FusionInsight-ClickHouse-*/clickhouse/keytab/clickhouse.keytab
- 以客户端安装用户,登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
如果是MRS 3.1.0版本集群并且集群已启用Kerberos认证,则还需要执行:
export CLICKHOUSE_SECURITY_ENABLED=true
- 执行如下命令使用客户端命令连接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的端口号
- 对某DATABASE进行赋权操作,执行如下命令。
授权操作语法,其中DATABASE为要操作的数据库名称,role为需要操作的角色。
GRANT [ON CLUSTER cluster_name] privilege ON {DATABASE|TABLE} TO {user | role]
例如,给用户testuser授予数据库t2的CREATE权限:
GRANT CREATE ON m2 to testuser;
- 对TABLE/VIEW进行赋权操作,执行如下命令,其中TABLE为要操作的表或视图名称,user为需要操作的角色。
对某数据库下的表赋予查询权限:
GRANT SELECT ON TABLE TO user;
对某数据库下的表赋予写入权限:
GRANT INSERT ON TABLE TO user;
- 执行如下命令,退出客户端。
quit;