clickhouse的sql语法5之账号授权功能

2022-04-25 09:13:40 浏览数 (1)

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授权的功能实例已经在这里给大家展示了,有需要的可以学习一下。

0 人点赞