ClickHouse中的remote权限

发布时间 2023-06-28 11:15:18作者: PiscesCanon

 

ClickHouse中的remote权限

 

REMOTE权限属于SOURCES权限之一,何为SOURCES,即数据源

允许在 table engines 和 table functions中使用外部数据源。

  • SOURCES. 级别: GROUP
    • FILE. 级别: GLOBAL
    • URL. 级别: GLOBAL
    • REMOTE. 级别: GLOBAL
    • YSQL. 级别: GLOBAL
    • ODBC. 级别: GLOBAL
    • JDBC. 级别: GLOBAL
    • HDFS. 级别: GLOBAL
    • S3. 级别: GLOBAL

SOURCES 权限允许使用所有数据源。当然也可以单独对每个数据源进行授权。要使用数据源时,还需要额外的权限。

示例:

 

在创建分布式表时,由于分布式表引用了其他节点的本地表,相当于使用了外部数据源,若是缺少REMOTE(或者更高级别的RESOURCE权限),则会提示权限不足。

如下:

CK01 :) --本地表可以创建成功
        CREATE TABLE zkm.zkm_local ON CLUSTER ceb_cluster
        (
            `id` String DEFAULT 'NULL' COMMENT '用户编号',
            `repo` String DEFAULT 'NULL' COMMENT '仓库编号'
        )
        ENGINE = ReplicatedMergeTree('/clickhouse/tables/zkm-{shard}/zkm/zkm_local', '{replica}')
        ORDER BY id;

...省略部分内容...

Query id: e264ccc5-ffc1-4843-9e6d-2c829aa19b7f

┌─host──────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ dev-app78 │ 90000 │       │                   33 │
└───────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
┌─host──────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ dev-app76 │ 90000 │       │                   20 │
│ dev-app77 │ 90000 │       │                   10 │
│ dev-app79 │ 90000 │       │                   00 │
└───────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

4 rows in set. Elapsed: 0.170 sec. 

CK01 :) --分布式表无法创建成功
        CREATE TABLE zkm.zkm ON CLUSTER ceb_cluster
        (
            `id` String DEFAULT 'NULL' COMMENT '用户编号',
            `repo` String DEFAULT 'NULL' COMMENT '仓库编号'
        )
        ENGINE = Distributed('ceb_cluster', 'zkm', 'zkm_local', rand());

...省略部分内容...

Query id: 261136e3-bc62-46d5-9130-83afd71fab8d


0 rows in set. Elapsed: 0.002 sec. 

Received exception from server (version 22.3.2):
Code: 497. DB::Exception: Received from localhost:9000. DB::Exception: zkm: Not enough privileges. To execute this query it's necessary to have grant REMOTE ON *.*. (ACCESS_DENIED)

 

 

 

授权remote权限:

CK01 :) grant REMOTE ON *.* to zkm on cluster ceb_cluster;

GRANT ON CLUSTER ceb_cluster REMOTE ON *.* TO zkm

Query id: 66d3923e-8338-49f5-af37-9cc34c09c745

┌─host──────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ dev-app78 │ 90000 │       │                   30 │
│ dev-app76 │ 90000 │       │                   20 │
│ dev-app77 │ 90000 │       │                   10 │
│ dev-app79 │ 90000 │       │                   00 │
└───────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

4 rows in set. Elapsed: 0.119 sec. 

 

 

再次创建分布式表可以成功了。

CK01 :) CREATE TABLE zkm.zkm ON CLUSTER ceb_cluster
        (
            `id` String DEFAULT 'NULL' COMMENT '用户编号',
            `repo` String DEFAULT 'NULL' COMMENT '仓库编号'
        )
        ENGINE = Distributed('ceb_cluster', 'zkm', 'zkm_local', rand());

CREATE TABLE zkm.zkm ON CLUSTER ceb_cluster
(
    `id` String DEFAULT 'NULL' COMMENT '用户编号',
    `repo` String DEFAULT 'NULL' COMMENT '仓库编号'
)
ENGINE = Distributed('ceb_cluster', 'zkm', 'zkm_local', rand())

Query id: 7ff7b59d-0968-40ce-ba58-8b4b999411d5

┌─host──────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ dev-app78 │ 90000 │       │                   30 │
│ dev-app76 │ 90000 │       │                   20 │
│ dev-app77 │ 90000 │       │                   10 │
│ dev-app79 │ 90000 │       │                   00 │
└───────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

4 rows in set. Elapsed: 0.125 sec. 

 

 

也可以授权更高级别的sources。

grant sources ON *.* to zkm on cluster ceb_cluster;