1:clickhouse配置管理员权限管理员账户主要用来进行权限分配和管理用的;需要在user.xml中进行如下配置:
代码语言:javascript复制<admin>
<password>123456</password>
<access_management>1</access_management>
<profile>default</profile>
<quota>default</quota>
</admin>
clickhouse自带default用户,但是该用户拥有所有权限且没有设置登陆密码和开启RBAC
access_management 默认为0,设置为1标识开启RBAC权限控制。
admin 配置的用户名
password 用户对应的密码
profile clickhouse角色
quota 配额,分配给该用户的资源
2:新增权限路径配置
代码语言:javascript复制vim /etc/clickhouse-server/config.xml
在<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>下
增加<access_control_path>/var/lib/clickhouse/access/</access_control_path>
3:重启clickhouse
代码语言:javascript复制systemctl restart clickhouse-server
上面三个步骤之后就能用admin账号登录之后创建新的角色进行授权了。
下面我们来试验一下
1:创建一个zhuihui的账号,密码是123456
2:创建一个test_role的角色
3:授权test_role角色的test库的权限
4:分配test_role给zhuihui这个账号
5:登录zhuihui账号查看授权库是否正常
1:创建用户
CREATE USER zhuihui IDENTIFIED WITH PLAINTEXT_PASSWORD BY '123456';
2:创建角色
CREATE ROLE test_role;
3:授权test库给查询功能
GRANT SELECT ON test.* TO test_role;
4:分配角色给账号
GRANT test_role TO zhuihui;
5:登录zhuihui账号查询权限
clickhouse-client --host 127.0.0.1 --user zhuihui --password 123456
最后登录权限如下,截图如下:
授权完了,我们通过角色回收一下权限:
REVOKE SELECT ON test.* FROM test_role;
执行上面命令之后zhuihui就没有权限了再查看了。
下面我们给default.example授权country_code,os_id这两个字段的查询权限。
代码语言:javascript复制GRANT SELECT(country_code,os_id) ON default.example TO zhuihui WITH GRANT OPTION
授权之后我们去使用select * from example;去查询,则会报错:
代码语言:javascript复制Code: 497. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: zhuihui: Not enough privileges. To execute this query it's necessary to have grant SELECT(country_code, os_id, browser_id, categories, action_day, action_time) ON default.example.
只有
代码语言:javascript复制select country_code,os_id from example;
这样查询,则返回正常。
我们也可以去取消一个字段的权限:
REVOKE SELECT(country_code) ON default.example FROM zhuihui;
最后我们整理下相关语句:
用户相关的语句
代码语言:javascript复制CREATE USER
ALTER USER
DROP USER
SHOW CREATE USER
角色相关的语句
代码语言:javascript复制CREATE ROLE
ALTER ROLE
DROP ROLE
SET ROLE
SET DEFAULT ROLE
SHOW CREATE ROLE
grant语句:
代码语言:javascript复制GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*}
TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION]
GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION]
示例:
GRANT SELECT(x,y) ON db.table TO john WITH GRANT OPTION
权限繁多可以参考:
https://clickhouse.tech/docs/en/sql-reference/statements/grant/
clickhouse授权的功能实例已经在这里给大家展示了,有需要的可以学习一下。