ClickHouse生产运维系列[部署篇]-04_ClickHouse创建数据库和用户及授予权限

一、前言

在前面的章节里,我们已经次用ckman 安装部署了两套ClickHouse集群。本节我们将在其中一套集群上演示创建用户角色、创建数据库和用户,并为用户赋予不同权限。以便为后面导入数据验证测试以及为chproxy调整配置文件做准备。

二、创建用户角色

为更好管理不同用户角色,建议为不同的角色先创建对应的配置文件。

1)创建配置文件


-- 执行如下SQL CREATE PROFILE IF NOT EXISTS 'database_admin' ON CLUSTER prod_cd_cluster;

image20240308140144893.png

2)创建角色


CREATE ROLE IF NOT EXISTS read_write ON CLUSTER prod_cd_cluster SETTINGS PROFILE 'database_admin';

image20240308141619433.png

也可以通过ClickHouse自带的客户端工具进行上述命令操作。

ClickHouse 客户端自带工具登录方式为: IP:8123/play,使用浏览器登录。

如下演示创建一个管理只读用户的配置文件,并在该配置文件下创建一个只读用户,演示操作如下:

创建配置文件:


CREATE PROFILE IF NOT EXISTS 'database_user' ON CLUSTER prod_cd_cluster;

image20240311164157619.png

  • 选择default账号,密码为创建CK集群时设置的密码
  • 命令后跟 on cluster cluster_name (如果不添加cluster_name,数据不会创建在整个集群而只是某个节点)
  • 点击Run执行命令

创建只读用户:


CREATE ROLE IF NOT EXISTS read_only ON CLUSTER ck_replica1 SETTINGS PROFILE 'database_user' ON CLUSTER prod_cd_cluster;

image20240311164754121.png

三、创建数据库


CREATE DATABASE IF NOT EXISTS ckdb ON CLUSTER prod_cd_cluster;

image20240311165047999.png

可以通过show databases SQL命令来查看当前集群所有数据库信息,如下所示:


-- 查询数据库信息 show databases

image20240311165336431.png

也可以通过show create database xxx 命令来查看某个数据库的具体信息,如下所示:


-- 查询某个数据库信息 SHOW CREATE DATABASE ckdb;

image20240311165644416.png

通过以上SQL可以查看数据库创建语句及库引擎默认为Atomic。

**补充信息:**如果希望创建一个非Atomic库引擎数据库,可以通过如下SQL语句创建,并且要确认该引擎是否被当前CK版本所支持。


CREATE DATABASE IF NOT EXISTS cktestdb ON CLUSTER prod_cd_cluster ENGINE = Ordinary;

如果使用的库引擎不被当前数据库默认支持,会报如下错误:

“10.110.5.136”, 9000, “336”, “Code: 336. DB::Exception: Ordinary database engine is deprecated (see also allow_deprecated_database_ordinary setting). (UNKNOWN_DATABASE_ENGINE) (version 22.8.5.29 (official build))”, “0”, “0”]Code: 336. DB::Exception: There was an error on [10.110.5.135:9000]: Code: 336. DB::Exception: Ordinary database engine is deprecated (see also allow_deprecated_database_ordinary setting). (UNKNOWN_DATABASE_ENGINE) (version 22.8.5.29 (official build)). (UNKNOWN_DATABASE_ENGINE) (version 22.8.5.29 (official build))

四、创建用户及授权

为更好的管理数据库权限,建议为用户创建不同的角色用户,比如读写和只读权限用户。

CK可以有多种方式创建用户,生产环境建议使用更安全的密码认证方式,具体操作如下。

1)生成用户SHA256_HASH密码


## 选择CK集群任一台服务器,参照如下命令生成SHA256_HASH密码 PASSWORD=$(base64 < /dev/urandom | head -c8); echo "{用户密码}"; echo -n "{用户密码}" | sha256sum | tr -d '-' --如示例如下 PASSWORD=$(base64 < /dev/urandom | head -c8); echo 'Ckman123456!'; echo -n 'Ckman123456!' | sha256sum | tr -d '-'

image20240311174320769.png

2)创建用户


-- 创建用户SQL语法 CREATE USER IF NOT EXISTS {用户名称} ON CLUSTER {集群名称} IDENTIFIED WITH SHA256_HASH BY {用户密码} DEFAULT ROLE {角色} DEFAULT DATABASE {默认数据库}; -- 创建读写用户 CREATE USER IF NOT EXISTS ck_writer ON CLUSTER 'prod_cd_cluster' IDENTIFIED WITH SHA256_HASH BY 'bd9734cd2335507ead689b8a61f75757bd00331f349d3296c96fc69cd562c89a' DEFAULT ROLE read_write DEFAULT DATABASE ckdb; -- 创建只读用户 CREATE USER IF NOT EXISTS ck_reader ON CLUSTER 'prod_cd_cluster' IDENTIFIED WITH SHA256_HASH BY 'bd9734cd2335507ead689b8a61f75757bd00331f349d3296c96fc69cd562c89a' DEFAULT ROLE read_only DEFAULT DATABASE ckdb;

操作过程及结果如下图:

image20240312152914614.png

image20240312150337036.png

补充信息:

可以采用如下方法创建一个可以允许从任何节点访问CK数据库的用户,如下所示:


CREATE USER test IDENTIFIED WITH plaintext_password BY 'test' HOST ANY ON CLUSTER prod_cd_cluster; -- `IDENTIFIED WITH plaintext_password`表明使用明文密码进行认证

可以通过如下方式来查看创建的用户信息,如下所示:

  • 方式一:

show create user test;

image20240312150729022.png

  • 方式二

select * from system.users where name = 'test';

image20240311172238800.png


3)分配用户权限


-- 分配权限语法如下 GRANT ON CLUSTER {集群名称} {权限,多个权限用逗号分隔} ON {数据库名称}.* TO {用户名称}; -- 分配读写用户权限 GRANT ON CLUSTER 'prod_cd_cluster' SHOW, SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, CREATE DICTIONARY, DROP DICTIONARY, DROP TABLE, DROP VIEW, TRUNCATE, OPTIMIZE, dictGet ON ckdb.* TO ck_writer;

image20240312153232692.png


-- 分配只读用户权限 GRANT ON CLUSTER 'prod_cd_cluster' SHOW, SELECT, OPTIMIZE, dictGet ON ckdb.* TO ck_reader;

image20240312153251253.png


4)查询用户权限


-- 查询用户权限语法如下 SHOW GRANTS FOR {用户名称} SHOW GRANTS FOR ck_writer,ck_reader;

image20240312153524247.png

5)修改用户权限

因为ClickHouse不同版本语法不同,亦或是某些SQL特性未在某个ClickHouse版本中支持。

对于ClickHouse修改用户权限,可以采用先对权限进行回收,然后执行grant授权。

比如当前使用的ClickHouse 22.8.5.29不支持使用 WITH REPLACE OPTION来修改权限,如下示例所示。


GRANT SELECT, INSERT, UPDATE, DELETE ON CLUSTER 'prod_cd_cluster' ON db1.* TO ck_reader WITH REPLACE OPTION;

image20240312162954103.png

欢迎您关注我的公众号【尚雷的驿站】


公众号:尚雷的驿站
CSDN :https://blog.csdn.net/shlei5580
墨天轮:https://www.modb.pro/u/2436
PGFans:https://www.pgfans.cn/user/home?userId=4159


image.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚雷_TechTalk01

感谢您的鼓励,我会再接再厉。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值