美文网首页clickhouse
clickhouse 行权限踩坑

clickhouse 行权限踩坑

作者: 定金喜 | 来源:发表于2023-01-18 11:45 被阅读0次

背景

clickhouse权限管理是基于RBAC(Role-Based Access Control)的访问控制管理,即通过SQL-driven来进行管理。在 RBAC 中,权限与角色相关联,通过成为角色的成员而得到这些角色的权限。简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,ClickHouse推荐使用该方式进行用户权限管理。更多的信息可以看官方文档。https://clickhouse.com/docs/zh/operations/access-rights/#access-rights

增加用户

项目需要增加一个新的只读用户,但是该用户只有部分表的部分数据权限,按照官方文档,大概的步骤如下:
1.手动开启SQL-driven开关
users.xml -> access_management:1 开启

 <users>
        <default>
            <password>123456</password>
            <networks>
                <ip>::/0</ip>
            </networks>
            <profile>default</profile>
            <quota>default</quota>
            <access_management>1</access_management>
        </default>
    </users>

2.用default用户登录,如果我们要新增一个用户B,这个用户只需要表C和D的no=10的权限,库名test,则整个sql如下:

create user B IDENTIFIED WITH PLAINTEXT_PASSWORD BY '123456';
create role IF NOT EXISTS test_role;
GRANT select on test.C to test_role;
GRANT select on test.D to test_role;
GRANT test_role TO test;

create row policy test_C_policy_no10 on test.C using no=10 to test_role;
create row policy test_D_policy_no10 on test.D using no=10 to test_role;

执行完这些sql,登录用户B进入数据库,确实这个用户只有C和D表no=10的数据,本来觉得一切已经大功告成了,但是过了几个小时,突然被同事告知线上有问题,我一想我也没干啥,除了.....,但是我只是增加了一个新用户,老用户我也没动,不可能有问题吧,然后我去测试环境试了下,没想到执行同样的sql后,我发现此时default用户已经查不到C和D表任何数据
----使用default用户--------
select count() from test.C; ---0
select count(
) from test.D; ---0

什么情况啊,当时我只想日了够

问题原因排查

因为以前也新建过只读用户,但是没有设置行权限,所以我觉得唯一可能出现问题的地方就是行权限的设置,所以我先把行权限删除,先恢复,切换到default用户执行:
drop row policy test_C_policy_no10 on test.C;
drop row policy test_D_policy_no10 on test.D;

删除后去执行count,发现此时已经恢复正常,所以行权限设置可能存在问题,然后去官方又瞄了几眼,然后发现了这样几行描述


意思就是说,新建对一个表的行权限,当这个行权限赋给用户A时,那么除了A之外的所有用户会失去对这个A表所有数据的权限,所以需要通过新建个全量的权限给除了A用户之外的用户
CREATE ROW POLICY pol2 ON mydb.table1 USING 1 TO ALL EXCEPT A

然后我特意去咨询了下作者,我觉得这么设计有点不好理解,作者也给出了自己的理解。


所以回到我们上面的问题,新建行权限的sql就变为:

------先执行这个,防止先执行后两行导致default瞬间无数据权限,可能会导致线上故障-------------------
create row policy test_C_policy_noALL on test.C using 1 EXCEPT B;
create row policy test_D_policy_noALL on test.D using 1 EXCEPT B;

create row policy test_C_policy_no10 on test.C using no=10 to test_role;
create row policy test_D_policy_no10 on test.D using no=10 to test_role;

相关文章

  • clickhouse 行权限踩坑

    背景 clickhouse权限管理是基于RBAC(Role-Based Access Control)的访问控制管...

  • clickhouse安装部署

    最近有一个业务需要使用clickhouse,所以研究了一下clickhouse,也踩了一些坑,在此记录一下。 写在...

  • App打包踩坑指南

    uni-app打包成app踩坑记录 1、 权限判断 (js文件已封装) 判断 相机、定位、推送 2、 以上权限需要...

  • Mac下使用Jenkins踩坑 Fastlane自动化iOS打包

    2018.4.17更新:解决MAC下使用pkg安装权限问题 踩坑记录Fastlane+蒲公英+Jenkinsfas...

  • Vue.js

    踩坑 安装环境 安装最新版Nodejs,无需Admin权限 You can get it from Node.js...

  • CentOS下搭建git服务器

    踩了几个坑 Linux权限 SSH 1 安装gityum install git查看版本号git --versio...

  • clickhouse 物化视图的踩坑记录

    由于线上查询大于1s,需要对于该次查询进行优化;为了加快查询的效率,我们在基础表上建立了一个物化视图 为了安全性的...

  • Appium踩坑之启动手机时候 error:exited wit

    (1) 踩过的坑 - exited with code 255 这个问题是由于手机权限没有完全开通,除了打开“US...

  • Andfix 踩坑记录

    前言 刚看到android热更新,抱着好奇心去玩了一把,没想到有这多的坑啊,记录下坑! 踩坑 1.加权限,我在这里...

  • 权限管理踩过的坑

    用到开源的一个权限管理库https://github.com/yanzhenjie/AndPermission 1...

网友评论

    本文标题:clickhouse 行权限踩坑

    本文链接:https://www.haomeiwen.com/subject/dzexhdtx.html