暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

2297

一、前言

在前面的章节里,我们已经次用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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论