clickhouse权限管理及访问控制

发布于 4 个月前 作者 JunjianS 1014 次浏览 来自 实战经验

本文重点总结一下clickhouse使用过程中权限管理相关的问题。 一、clickhouse支持两种形式的权限管理,配置文件和sql语句(官方叫SQL-driven) 1.创建用户 按照官方建议,通过配置文件配置default用户

  • 为 default 用户开启SQL驱动方式的访问权限和账户管理。
  • 使用 default 用户登录并且创建所需要的所有用户,首先创建管理员账户admin ,然后赋权(GRANT ALL ON . WITH GRANT OPTION TO admin),通过管理员账号创建其他普通账号。
  • 创建完admin账号后,限制 default 用户的权限并且禁用SQL驱动方式的访问权限和账户管理。

(1)通过配置文件 在配置文件user.xml中配置default用户,标签users的子标签default即为用户名。

	   <users>
        <default>
            <password>1234</password>
            <networks incl="networks" replace="replace">
              <host>ch01</host>
              <host>ch02</host>
            </networks>
            <profile>default</profile>
            <quota>default</quota>
            <access_management>1</access_management>
        </default>
    </users>

在配置集群节点时,需要配置集群节点访问间访问的账号,否则在访问分布式表的时候会报权限错误。而且只需要在查询驱动节点之外的节点(包括这些节点的replica)。

<!--ck集群节点-->
<clickhouse_remote_servers>
    <test_ck_cluster>
        <!--分片1-->
        <shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>ch01</host>
                <port>9000</port>
               <compression>true</compression>
            </replica>
            <replica>
                <host>ch02</host>
                <port>9000</port>
               <compression>true</compression>
            </replica>
        </shard>
        <!--分片2-->
        <shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>ch03</host>
                <port>9000</port>
                <user>default</user>
                <password>1234</password>
                <compression>true</compression>
            </replica>
            <replica>
                <host>ch04</host>
                <port>9000</port>
                <user>default</user>
                <password>1234</password>
               <compression>true</compression>
            </replica>
        </shard>
    </test_ck_cluster>
</clickhouse_remote_servers>

(2)通过sql 在集群test_ck_cluster上创建账号user1,一般情况下,因为客户端只会通过集群中的一个节点访问集群,普通账号只需要在这个查询驱动节点创建即可,不需要在集群所有节点上创建。

     create user user1 [on cluster test_ck_cluster] identified with plaintext_password by '1234';

2.授权

(1)通过配置文件 (2)通过sql

    grant all on db1.* to user1;

3.建profile (1)通过配置文件

<profiles>
        <!-- Default settings. -->
        <default>
            <!-- Maximum memory usage for processing single query, in bytes. -->
            <max_memory_usage>30000000000</max_memory_usage>
            <max_bytes_before_external_group_by>15000000000</max_bytes_before_external_group_by>
            <distributed_aggregation_memory_efficient>1</distributed_aggregation_memory_efficient>
            <max_memory_usage_for_user>30000000000</max_memory_usage_for_user>
            <max_memory_usage_for_all_queries>30000000000</max_memory_usage_for_all_queries>
            <!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. -->
            <use_uncompressed_cache>0</use_uncompressed_cache>
            <load_balancing>random</load_balancing>
        </default>
    </profiles>

(2)通过sql

			  create settings profile max_memory_usage_profile SETTINGS max_memory_usage=30000000000,max_bytes_before_external_group_by=15000000000,distributed_aggregation_memory_efficient=1 to dhome on cluster test_ck_cluster;

4、建quota (1)通过配置文件

<quotas>
        <!-- Name of quota. -->
        <default>
            <!-- Limits for time interval. You could specify many intervals with different limits. -->
            <interval>
                <!-- Length of interval. -->
                <duration>3600</duration>

                <!-- No limits. Just calculate resource usage for time interval. -->
                <queries>100</queries>
                <errors>0</errors>
                <result_rows>0</result_rows>
                <read_rows>0</read_rows>
                <execution_time>0</execution_time>
            </interval>
        </default>
    </quotas>

(2)通过sql create quota default for interval 15 month max queries = 100 to user1;

1 回复

请问,我这里有一个cluster,开启RBAC权限控制。通过“GRANT SELECT ON test. TO read_all WITH GRANT OPTION”给角色赋权后,并通过“GRANT read_all TO read;”将角色分给read用户。但read用户不会立刻看到test库及表。只有重启clickhouse-server才会立刻生效。楼主碰见过这样的问题吗?是有一个配置项能控制这个吗?

回到顶部