当我们需要创建用户并进行设置读写的权限时,有两种方式, 一种是在配置文件中配置, 一种是通过sql方式配置。
第一种方式 配置
编辑 /etc/clickhouse-server/user.xml
<?xml version="1.0"?>
<clickhouse>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<max_memory_usage>10</max_memory_usage>
<max_bytes_before_external_group_by>5</max_bytes_before_external_group_by>
<max_bytes_before_external_sort>5</max_bytes_before_external_sort>
<load_balancing>random</load_balancing>
</default>
<!-- Profile that allows only read queries. -->
<readonly>
<readonly>1</readonly>
</readonly>
<!-- 写用户-->
<ck_writer>
<load_balancing>random</load_balancing>
</ck_writer>
<!-- 只读用户-->
<ck_reader>
<readonly>2</readonly>
<allow_ddl>0</allow_ddl>
</ck_reader>
</profiles>
<!-- Users and ACL. -->
<users>
<default>
<!-- User can create other users and grant rights to them. -->
<!-- <access_management>1</access_management> -->
</default>
<admin>
<password>123456</password>
<networks><ip>::/0</ip></networks>
<profile>default</profile>
<quota>default</quota>
<!-- 用户可以创建其他用户并授予他们权限。-->
<access_management>1</access_management>
</admin>
<ck_writer>
<password>123456</password>
<networks><ip>::/0</ip></networks>
<profile>ck_writer</profile>
<quota>default</quota>
</ck_writer>
<ck_reader>
<password>123456</password>
<networks><ip>::/0</ip></networks>
<profile>ck_reader</profile>
<quota>default</quota>
<default_database>test_db</default_database>
<!-- 设置读账号能看到的数据库-->
<allow_databases>
<database>test_db</database>
<database>default</database>
<database>system</database>
</allow_databases>
</ck_reader>
</users>
<!-- Quotas. -->
<quotas>
<default>
<!-- 忽略 -->
</default>
</quotas>
</clickhouse>
上面通过配置方式,创建了两个账号,一个是只读、一个是读写
第二种方式:sql方式
第一步、需要有一个授权的账号, 可通过上面第一种方式配置
/etc/clickhouse-server/user.xml
<users>
<default>
<!-- ...... -->
</default>
<admin>
<password>123456</password>
<networks><ip>::/0</ip></networks>
<profile>default</profile>
<quota>default</quota>
<!-- 设置权限管理的能力 -->
<access_management>1</access_management>
</admin>
</users>
第二步、创建用户、角色、授权角色给用户
-- 创建用户 guaoran、明文明码:123456
create user if not exists guaoran on cluster my_cluster
IDENTIFIED WITH plaintext_password BY '123456';
-- 创建角色 guaoran_role
create role if not exists guaoran_role on cluster my_cluster ;
-- 授权 test_db 库查询权限给 角色 guaoran_role
GRANT SELECT ON test_db.* TO guaoran_role on cluster my_cluster ;
-- 分配角色给用户 guraoran
GRANT guaoran_role TO guaoran on cluster my_cluster ;
如果想收回角色的权限
-- 收回角色 guaoran_role 的查询权限
REVOKE SELECT ON test_db.* FROM guaoran_role on cluster my_cluster ;
第三步、登录查看
clickhouse-client --host 127.0.0.1 --user guaoran --password 123456
创建只读账号的权限
-- 创建用户 reader、明文明码:123456
create user if not exists reader on cluster my_cluster
IDENTIFIED WITH plaintext_password BY '123456';
-- 创建角色 reader_role
create role if not exists reader_role on cluster my_cluster ;
-- 授权角色 reader_role 可以读test_db/system 数据库
GRANT SELECT ON test_db.* TO reader_role on cluster my_cluster ;
GRANT SELECT ON system.* TO reader_role on cluster my_cluster ;
-- 授权 reader_role 角色给 reader 用户
GRANT reader_role TO reader on cluster my_cluster ;
创建读写账号的权限
-- 创建用户 writer、明文明码:123456
create user if not exists writer on cluster my_cluster
IDENTIFIED WITH plaintext_password BY '123456';
-- 创建角色 wirter_role
create role if not exists wirter_role on cluster my_cluster ;
-- 授权角色 wirter_role 可以读写所有数据库
GRANT SHOW, SELECT, INSERT, ALTER, CREATE, DROP, TRUNCATE, OPTIMIZE, KILL QUERY, MOVE PARTITION BETWEEN SHARDS, SYSTEM, dictGet, INTROSPECTION, SOURCES ON *.* TO wirter_role on cluster my_cluster ;
-- 授权 wirter_role 角色给 guaoran 用户
GRANT wirter_role TO guaoran on cluster my_cluster ;
-- 收回 guaoran 用户 wirter_role 角色
REVOKE wirter_role from guaoran on cluster my_cluster ;
查看所有角色信息
首先保证该账号已经配置了管理权限的能力,即:
<access_management>1</access_management>
通过该命令可以查看当前所有的权限
SHOW ACCESS