Clickhouse用户权限

目录

一、 创建用户 

1.1 xml方式创建用户 

1.2 Sql驱动方式创建用户 

二、 用户权限赋予 

2.1 xml方式对用户赋予权限 

2.2 sql驱动方式赋予权限 

三、用户限额 

3.1 xml方式用户限额 

3.2 sql驱动方式限额 

、创建用户

1.1 xml方式创建用户

创建用户的具体xml内容如下:

<!-- If user name was not specified, 'default' user is used. -->

    <user_name>

        <password></password>

        <!-- Or -->

        <password_sha256_hex></password_sha256_hex>

 

        <access_management>0|1</access_management>

 

        <networks incl="networks" replace="replace">

        </networks>

 

        <profile>profile_name</profile>

 

        <quota>default</quota>

 

        <databases>

            <database_name>

                <table_name>

                    <filter>expression</filter>

                <table_name>

            </database_name>

        </databases>

    </user_name>

    <!-- Other users settings -->

整个内容放在user.xml的<users></users>标签下。

Password设置:

Password下存放明文密码,password_sha256_hex标签下存放sha256加密后的密码,password_double_sha1_hex标签下可以存放double sha1加密后的密码。这里建议使用加密过后的密码。

可以在命令行中创建加密密码。

Sha256加密执行以下命令:

PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

Double sha1加密执行以下命令

PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'

 

Network网络限制:

<network>,允许被登陆clickhouse服务器的客户端列表,支持通过ip、host、host_regexp方式设置

使用ip进行设置:

<ip>1.1.1.1</ip>

<ip>10.0.0.1/8</ip><!-设置具体的ip地址来限制登录用户-->

 

<!--为所有客户端打开权限-->

<ip>::/0</ip>

 

<!--仅允许本地登陆-->

<ip>::1</ip>

<ip>127.0.0.1</ip>

使用host来进行设置:

<host>example1.host.com</host>

使用host_regexp进行设置:

<host_regexp>^example\d\d-\d\d-\d\.host\.ru$</host_regexp>

 

Profile设置:

在<profile></profile>标签下,写入之前已经设置好的profile权限名,表示该用户拥有该权限。具体的权限设置见2.1中profiles标签的设置。

 

Quota设置:

在<quota></quota>标签下,填入已经预先配置好的quota名称,具体的quota设置见3.1中的quota配置。

Database设置:

这里是设置用户可以访问的数据库,以及数据库下表的访问权限。

<databases>

        <database_name>

            <table1>

                <filter>id = 1000</filter>

            </table1>

        </database_name>

    </databases>

<databases>或者可以使用<allow_databases>下定义该用户可以访问的数据库,这里可以包含一个或者多个数据库,同理在数据库标签下可以设置表名,表示可以访问的对应数据库下的表。不填写默认全都能访问。<filter></filter>中填写表达式,id= 1000,表示只能访问id为1000的数据项,id<10,表示只能访问id小于10的数据项。其他的表达式同理。

 

1.2 sql方式创建用户

配置修改:

1、在config.xml中添加access_control_path 配置项,具体如下:<access_control_path>/var/lib/clickhouse/access/</access_control_path>

通过 SQL 形式创建的用户、角色等信息将以文件的形式被保存在这个目录。

2、在user.xml中为默认用户default添加access_management配置项

            <access_management>1</access_management>

0代表disabled,1代表enabled。默认为0。

创建用户:

官方文档介绍如下: CREATE USER [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]

    [IDENTIFIED [WITH {NO_PASSWORD|PLAINTEXT_PASSWORD|SHA256_PASSWORD|SHA256_HASH|DOUBLE_SHA1_PASSWORD|DOUBLE_SHA1_HASH}] BY {'password'|'hash'}]

    [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]

    [DEFAULT ROLE role [,...]]

    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

这里举例创建一个user_01用户:

 CREATE USER user_01 IDENTIFIED WITH PLAINTEXT_PASSWORD BY '123'

 

官方修改用户信息命令如下:

ALTER USER [IF EXISTS] name [ON CLUSTER cluster_name]

    [RENAME TO new_name]

    [IDENTIFIED [WITH {PLAINTEXT_PASSWORD|SHA256_PASSWORD|DOUBLE_SHA1_PASSWORD}] BY {'password'|'hash'}]

    [[ADD|DROP] HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]

    [DEFAULT ROLE role [,...] | ALL | ALL EXCEPT role [,...] ]

    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

 

这里举例修改用户的密码:

ALTER USER user_01 IDENTIFIED WITH PLAINTEXT_PASSWORD BY '111111'

将密码修改为111111.

 

 

 

 

 

 

 

二、用户权限赋予

2.1 xml方式对用户赋予权限

在user.xml中定义各种权限

   <profiles>    

       <!--可自定义名称,default是默认存在的角色名称-->

<!--可以设置多种权限,每个用户只需要在其对用的xml中<profile>标签填入其权限名称即可-->

        <default>

        <max_memory_usage>10000000000</max_memory_usage><!-限制内存使用-->

            <load_balancing>random</load_balancing>

            <constraints><!-- 配置约束-->

                <max_memory_usage>

                    <min>5000000000</min>

                    <max>20000000000</max>

                </max_memory_usage>

                <load_balancing>

                    <readonly/>

                </load_balancing>

            </constraints>

</default>

    </profiles>

profile中有约束条件,从而限制其中的参数值被任意修改,约束条件有三种规则:

Min:最小值约束,对应参数取值不能小于该值.

Max:最大值约束,对应参数取值不能大雨该值.

Readonly:只读约束,对应参数禁止修改.

 

参数介绍:

 readonly :读权限、写权限和设置权限,由此标签控制,它有三种取值:

0,不进行任何限制(默认值,可读可写);

1,只拥有读权限(只能执行SELECT、EXISTS、SHOW和DESCRIBE);

2,拥有读权限和设置权限(在读权限基础上,增加了SET查询)。

当设置readonly=1后,用户将无法在当前会话中更改readonly和allow_ddl设置;也可以通过约束来限制更改权限。

allow_ddl:DDL权限由此标签控制,它有两种取值:

当取值为0时,不允许DDL查询;

当取值为1时,允许DDL查询(默认值)

如果当前会话的allow_ddl = 0,则无法执行SET allow_ddl = 1

对用户增删改查限制:(select,insert,delete,update)

<normal> --只读,不能DDL

        <readonly>1</readonly>

        <allow_ddl>0</allow_ddl>

 </normal>

 

<normal_1> --读且能set,不能DDL

<readonly>2</readonly>

<allow_ddl>0</allow_ddl>

</normal_1>

 

<normal_2> --只读,即使DDL允许

<readonly>1</readonly>

<allow_ddl>1</allow_ddl>

</normal_2>

 

<normal_3> --读写,能DDL

<readonly>0</readonly>

<allow_ddl>1</allow_ddl>

</normal_3>

通过修改用户的<profile></profile>标签的名称来改变该用户的权限,其中的profile_name一定要在profiles下有定义才能够实现

2.2 sql驱动方式赋予权限

官方标准的sql语句格式:GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION]

 

直接对user赋予权限:

grant select on db_test.* to user_01 ;

赋予用户对db_test数据库下的所有表的select查询功能。

Grant insert on db_test.* to user_01;

Grant delete on db_test.* to user_01;

Grant update on db_test.* to user_01;

以上是赋予user_01用户对数据库db_test下所有表的增删改查功能。

revoke delete on db_test.* from user_01 ;

撤销用户对数据库db_test下所有表的delete查询功能。其他权限的撤销操作同上。

 

通过对角色赋予权限再赋予用户角色:

CREATE ROLE [IF NOT EXISTS | OR REPLACE] name

    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

Creat role manager;//创建角色

GRANT SELECT ON *.* TO manager;

GRANT insert ON *.* TO manager;//对角色授权

GRANT manager to user_01;//对用户赋予角色信息

Create USER test_01 default role manage;//创建角色赋予默认的角色

三、用户限额

3.1 xml方式用户限额

基本的xml方式限额

<quotas>

        <default> <!--自定义名称-->

            <interval>

                <duration>3600</duration>

                <queries>0</queries>

                <errors>0</errors>

                <result_rows>0</result_rows>

                <read_rows>0</read_rows>

                <execution_time>0</execution_time>

            </interval>

        </default>

</quotas>

每个参数代表的含义:

1.Duration

累计时间周期,单位秒,到达周期时间清除所有收集值,然后重新计算。

2.Queries

在周期内允许查询次数限制

3.Errors

在周期内允许引发异常的次数限制

4.Result_rows

在周期内允许的查询返回结果行数

5.Read_rows

在周期内,允许远程节点读取的数据行数

6.Execution_time

允许查询的总执行时间,单位为秒

3.2 sql驱动方式限额

官方给出的限额创建命令:

CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]

    [KEYED BY {'none' | 'user name' | 'ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}]

    [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY}

        {MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] |

         NO LIMITS | TRACKING ONLY} [,...]]

    [TO {role [,...] | ALL | ALL EXCEPT role [,...]}]

创建一个配额举例:(限制最大的查询次数)

CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO user_01

这里可以根据xml中配额的各项参数,通过修改自己所需要的参数名称和数值来定义配额。

 

删除一个配额信息

DROP QUOTA [IF EXISTS] name [,...] [ON CLUSTER cluster_name]

查询配额信息

SHOW CREATE QUOTA [name | CURRENT]

以上的介绍都是一些简单的基本操作,如果需要更加详细的介绍文档,参见官文api   https://clickhouse.tech/docs/en/

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值