ClickHouse: 权限控制-喀秋莎发射指北

本文详细介绍了ClickHouse的权限控制机制,包括用户帐户、角色、行策略、设置配置文件和配额。建议使用SQL语句进行权限管理,支持RBAC方法。同时讲解了如何通过配置文件users.xml和config.xml设置权限,强调了不能同时使用两种方法管理同一访问实体。文章还提供了各种权限相关的SQL命令示例以及配置文件的管理技巧。
摘要由CSDN通过智能技术生成


古语有云:“道路千万条,安全第一条,开车不规范,亲人两行泪”

纵观历史上的知名删库跑路战役,MongoDB、ES、Redis之前都出过由于权限缺失导致的重大安全事故。

ClickHouse 的访问控制包括以下元素:

- 用户帐户

- 角色(Role)

- 行策略(Row Policy)

- 设置配置文件(Profile)

- 配额(Quota)

配置访问权限方式有两种:

  • SQL语句的工作流,类似MySQL。默认关闭需要启用此功能。

  • 服务器配置文件 users.xml 和 config.xml 

目前两种方式同时生效,如果使用服务器配置文件来管理用户和访问权限,可以轻松地过渡到基于SQL语句的。

但是要注意:不能通过两种配置方法同时管理同一访问实体。

下面就对这两种方式分别测试下。


基于SQL方式的权限管理

官方建议使用SQL语句的方式来管理权限,虽然这是在最近版本中才加入的。

ClickHouse新版本已支持基于RBAC方法的访问控制管理

关于RBAC:

https://en.wikipedia.org/wiki/Role-based_access_control

默认情况下,ClickHouse服务器使用用户default连接数据库,它具有所有的权限,不需要密码。但却是基于配置文件管理的。

新部署的ClickHouse建议使用以下方式管理用户:

  1. 为default用户启用 SQL方式 的访问控制

  2. 用default用户登录并创建所有必需的用户。

    建议创建一个管理员帐户:

    GRANT ALL ON *.* TO ch_dba WITH GRANT OPTION

  3. 限制default用户权限,并禁用 SQL方式 访问控制和帐户管理。

举个例子:

# 直接建立用户会报错:

bj80 :) CREATE USER ch_dba HOST IP '127.0.0.1' IDENTIFIED WITH sha256_password BY 'qwerty'; 

CREATE USER ch_dba IDENTIFIED WITH sha256_hash BY '65E84BE33532FB784C48129675F9EFF3A682B27168C0EA744B2CF58EE02337C5' HOST LOCAL

Received exception from server (version 20.4.2):
Code: 497. DB::Exception: Received from localhost:9000. DB::Exception: default: Not enough privileges. To execute this query it s necessary to have the grant CREATE USER ON *.*. 

0 rows in set. Elapsed: 0.811 sec. 

# 修改配置文件 

    /etc/clickhouse-server/users.xml

# 在user  default 用户里添加一行 access_management 参数启动SQL方式认证 (1启动 0禁止,默认0)

    <users>
        <default>
            <!-- User can create other users and grant rights to them. -->
            <!-- <access_management>1</access_management> -->
            <access_management>1</access_management>
        </default>
    </users>

# 再次建用户成功了:

bj80 :) CREATE USER ch_dba HOST IP '127.0.0.1' IDENTIFIED WITH sha256_password BY 'qwerty';

CREATE USER ch_dba IDENTIFIED WITH sha256_hash BY '65E84BE33532FB784C48129675F9EFF3A682B27168C0EA744B2CF58EE02337C5' HOST LOCAL

Ok.

0 rows in set. Elapsed: 0.001 sec. 

bj80 :) 

# 对DBA用户进行授权:(官方文档中的语法有误,WITH GRANT OPTION要放在最后)

bj80 :) GRANT ALL ON *.* WITH GRANT OPTION TO ch_dba;

Syntax error: failed at position 18:

GRANT ALL ON *.* WITH GRANT OPTION TO ch_dba;

Expected one of: Comma, ON, TO, token

bj80 :) GRANT ALL ON *.* TO ch_dba WITH GRANT OPTION;

GRANT ALL ON *.* TO ch_dba WITH GRANT OPTION

Ok.

0 rows in set. Elapsed: 0.001 sec. 

bj80 :) 

# 检查下权限:

bj80 :) show create user ch_dba;

SHOW CREATE USER ch_dba

┌─CREATE USER ch_dba────────────┐
│ CREATE USER ch_dba HOST LOCAL │
└───────────────────────────────┘

1 rows in set. Elapsed: 0.001 sec. 

bj80 :) show grants for ch_dba;

SHOW GRANTS FOR ch_dba

┌─GRANTS FOR ch_dba────────────────────────────┐
│ GRANT ALL ON *.* TO ch_dba WITH GRANT OPTION │
└──────────────────────────────────────────────
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值