Clickhouse用户权限管理配置sql操作

Clickhouse用户权限管理操作

修改clickhouse的配置,开启sql执行权限

Clickhouse 支持sql执行权限的版本 要在20.5版以上

1.1.1修改users.xml

SQL化用户配置默认是关闭的,要启用它,需要在users.xml中的一个用户(一般就是默认的default)下添加:

<access_management>1</access_management>
在这里插入图片描述

1.1.2修改config.xml

2)另外还需要在config.xml中配置权限管理数据的存储位置:
这个是权限要存储的位置,自定义目录。
比如:我把它放到 :/usr/local/work/clickhouse/data/access
<local_directory>


<access_control_path>/usr/local/work/clickhouse/data/access</access_control_path>
</local_directory>

在这里插入图片描述

修改配置完成之后,重启clickhouse

systemctl start clickhouse-server.service

1.2.1 创建用户

1)创建用户
CREATE USER IF NOT EXISETS test_dba IDENTIFIED WITH PLAINTEXT_PASSWORD BY ‘123456’;

2)删除用户
DROP USER test_dba

3)概念解释
 IDENTIFIED WITH no_password – 没有密码
IDENTIFIED WITH plaintext_password BY ‘qwerty’ – 明文密码
IDENTIFIED WITH sha256_password BY ‘qwerty’ or IDENTIFIED BY ‘password’ – sha256_password 加密密码
IDENTIFIED WITH sha256_hash BY ‘hash’ – sha256_hash 加密密码
用户主机:主机,用户连接地址。
HOST IP ‘ip_address_or_subnetwork’ — 用户通过指定IP连接。
HOST ANY — 可以从任何位置连接,默认。
HOST LOCAL — 只能在本地连接。
CREATE USER mira@‘127.0.0.1’ — 等效于 HOST IP 语法
CREATE USER mira@‘localhost’ — 等效于 HOST LOCAL 语法
CREATE USER mira@‘192.168.%.%’ — 等效于 HOST LIKE 语法

1.2.2创建角色

1)创建角色
CREATE ROLE test_role
2)也可在创建角色的时候设置一些限制
CREATE ROLE test_role SETTINGS max_memory_usage = 5000000 READONLY
select * from system.roles;
3)将内存改为50G
ALTER ROLE test_role SETTINGS max_memory_usage = 50000000000, max_threads = 2
##将查询权限付给角色test_role,然后把角色分配给用户test_dba
GRANT SELECT(x,y) ON fl_db.* TO test_role WITH GRANT OPTION;

1.2.3创建配额

1)创建配额batch_quota,在20秒内查询最大次数2次,最大行数10000条,给角色 test_role
CREATE QUOTA IF NOT EXISTS batch_quota FOR INTERVAL 20 second MAX queries 2, MAX result_rows 1000 TO test_role

1.2.4 权限设置

1.2.4.1设置权限

使用 GRANT 账号必须有 GRANT OPTION的权限,用户只能将在自身权限范围内的权限进行授权。
通过GRANTEES来授权用户或则角色,可以获得创建该用户的权限。
WITH GRANT OPTION 作用是 当一些权限由A赋予给B,B就有了可以将自身权限赋予给别人。

user — 指定可以授予权限的用户
role — 指定可以授予权限的角色
ANY — 可以向任何人授予权限
NONE — 可以向 none 授予权限

// 授权指令 给用户增加查询 和查询权限
grant select,insert on fl_db.* to test_dba WITH GRANT OPTION;
// 解除授权
REVOKE SELECT(wage) ON accounts.staff FROM mira;

or

REVOKE role1 FROM mira;
// 授权这个test_role角色给 test_dba这用户
GRANT test_role TO test_dba
//给用户或角色授予所有权限
grant ALL on . to user2;

//授权,all 管理员用户/角色
grant all on . to dba with grant option;

//授权,增删改查权限/角色
grant select,insert,alter delete,alter update on testdb.* to app;

1.2.4.2取消用户权限

// 取消用户权限
revoke alter on . from user;
// 除用户zjy上角色xxx的权限。
revoke xxx from zjy;

举几个例子:
创建密码为123456的用户cc,只能本机登录:
create user cc host ip ‘127.0.0.1’ identified with sha256_password by ‘123456’;
创建用户帐户 test,为其分配角色并将此角色设为默认:
CREATE USER test DEFAULT ROLE role1, role2;
创建用户帐户 john 并将他未来的所有角色设为默认:
CREATE USER john DEFAULT ROLE ALL;
当将来某个角色分配给 john 时,它将自动变为默认值。
创建用户帐户 john 并将他未来的所有角色设为默认,除了 role1 和 role2:
CREATE USER john DEFAULT ROLE ALL EXCEPT role1, role2;

1.2.5查看存储的账户信息

ClickHouse 将所得的用户定义存储在 ClickHouse 将所得的用户定义存储在/usr/local/work/clickhouse/data/access中。

2.clickhouse用户权限配置方案

根据业务实际情况考虑,觉得clickhouse的配额权限,是用户不感知的。把配额权限赋予角色,角色这里可以让用户感知(待定)。 创建用户的时候把角色赋予给用户即可。一个用户可以有一到多个权限。
配额后台系统定义好几个标准。

Clickhouse的权限类型

读: SELECT, SHOW, DESCRIBE, EXISTS.
写: INSERT, OPTIMIZE.
设置: SET, USE.
DDL: CREATE, ALTER, RENAME, ATTACH, DETACH, DROP TRUNCATE.
KILL:kill 查询

权限设置方式

2.2.1方式一:直接创建配额,创建角色,关联用户

创建配额,1分钟最多查询次数100次查询最大行数,最大结果集1000000条
分配给 角色 role1
CREATE QUOTA IF NOT EXISTS batch_quota FOR INTERVAL 60 second MAX queries 100, MAX result_rows 1000000 TO role1

将数据库查询权限给角色
GRANT SELECT ON fl_db.* TO test_role WITH GRANT OPTION;
也可指定具体的表 fl_db.test
Select(x,y.,z)可指定查询的列

2.2.2 方式二:共享配置组(Profiles)

// 创建profile,设置最大最小线程 最大最小内存使用范围,只读权限 这个可以公共使用。
CREATE SETTINGS PROFILE IF NOT EXISTS ro_profile SETTINGS max_threads = 2 MIN 1 MAX 4,max_memory_usage = 10000000 MIN 1000000 MAX 20000000 READONLY

// 创建角色 设置它依赖的profile
CREATE ROLE IF NOT EXISTS ro_role SETTINGS PROFILE ‘ro_profile’

// 为角色设置资源配额
CREATE QUOTA IF NOT EXISTS batch_quota FOR INTERVAL 3600 second MAX queries 60, MAX result_rows 1000000 TO ro_role
// 把角色分配给用户
CREATE USER ro_user IDENTIFIED WITH SHA256_PASSWORD BY ‘top_secret’ DEFAULT ROLE ro_role ;
// 方式2
Grant ro_role to ro_user;

将数据库查询权限给角色
GRANT SELECT ON fl_db.* TO test_role WITH GRANT OPTION;
也可指定具体的表 fl_db.test
Select(x,y.,z)可指定查询的列

Guess you like

Origin blog.csdn.net/weixin_43975771/article/details/121421626