ITPub博客

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

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

原创 数据库开发技术 作者:oracle_jacky 时间:2024-03-13 08:10:00 0 删除 编辑

一、前言

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

二、创建用户角色

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

1)创建配置文件

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

2)创建角色

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

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

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

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

创建配置文件:

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

  • 选择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;

三、创建数据库

CREATE DATABASE IF NOT EXISTS ckdb ON CLUSTER prod_cd_cluster;

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

-- 查询数据库信息
show databases

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

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

通过以上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 '-'

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;

操作过程及结果如下图:


补充信息:

可以采用如下方法创建一个可以允许从任何节点访问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;

  • 方式二

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


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;

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


4)查询用户权限

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

SHOW GRANTS FOR ck_writer,ck_reader;

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;


原文作者:尚雷的驿站;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
现供职于某上市互联网公司担任DBA,荣获 PG ACE称号,拥有 Oracle OCM、AWS等及国产数据库等产品认证。喜欢技术分享,热爱交友,也热爱健身。

注册时间:2024-01-01

  • 博文量
    68
  • 访问量
    45428