ClickHouse 授权相关语法介绍

x33g5p2x  于2021-02-20 发布在 ClickHouse  
字(9.4k)|赞(0)|评价(0)|浏览(1500)

给ClickHouse的用户或角色赋予 [权限]
将角色分配给用户或其他角色
取消权限,使用 [REVOKE]语句。查看已授权的权限请使用 [SHOW GRANTS]。

授权操作语法

GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION]
  • privilege — 权限类型
  • role — 用户角色
  • user — 用户账号

WITH GRANT OPTION 授予 userrole执行 GRANT 操作的权限。用户可将在自身权限范围内的权限进行授权

角色分配的语法

GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION]
  • role — 角色
  • user — 用户

WITH ADMIN OPTION 授予 userrole 执行[ADMIN OPTION] 的权限

用法

使用 GRANT,你的账号必须有 GRANT OPTION的权限。用户只能将在自身权限范围内的权限进行授权

例如,管理员有权通过下面的语句给 john账号添加授权

GRANT SELECT(x,y) ON db.table TO john WITH GRANT OPTION

这意味着 john 有权限执行以下操作:

  • SELECT x,y FROM db.table.
  • SELECT x FROM db.table.
  • SELECT y FROM db.table.

john 不能执行SELECT z FROM db.table。同样的 SELECT * FROMdb.table 也是不允许的。执行这个查询时,CH不会返回任何数据,甚至 xy列。唯一的例外是,当表仅包含 xy列时。这种情况下,CH返回所有数据。

同样 john 有权执行 GRANT OPTION,因此他能给其它账号进行和自己账号权限范围相同的授权。

可以使用* 号代替表或库名进行授权操作。例如, GRANT SELECT ONdb.* TO john 操作运行 johndb库的所有表执行 SELECT查询。同样,你可以忽略库名。在这种情形下,权限将指向当前的数据库。例如, GRANT SELECT ON* to john 对当前数据库的所有表指定授权, GARNT SELECT ON mytable to john对当前数据库的 mytable表进行授权。

访问 systen数据库总是被允许的(因为这个数据库用来处理sql操作)
可以一次给多个账号进行多种授权操作。 GRANT SELECT,INSERT ON *.* TO john,robin 允许 johnrobin 账号对任意数据库的任意表执行 INSERTSELECT操作。

权限

权限是指执行特定操作的许可

权限有层级结构。一组允许的操作依赖相应的权限范围。

权限的层级:

  • [SELECT]
  • [INSERT]
  • [ALTER]
    • ALTER TABLE
      • ALTER UPDATE
      • ALTER DELETE
      • ALTER COLUMN
        • ALTER ADD COLUMN
        • ALTER DROP COLUMN
        • ALTER MODIFY COLUMN
        • ALTER COMMENT COLUMN
        • ALTER CLEAR COLUMN
        • ALTER RENAME COLUMN
      • ALTER INDEX
        • ALTER ORDER BY
        • ALTER ADD INDEX
        • ALTER DROP INDEX
        • ALTER MATERIALIZE INDEX
        • ALTER CLEAR INDEX
      • ALTER CONSTRAINT
        • ALTER ADD CONSTRAINT

        • ALTER DROP CONSTRAINT

      • ALTER TTL
      • ALTER MATERIALIZE TTL
      • ALTER SETTINGS
      • ALTER MOVE PARTITION
      • ALTER FETCH PARTITION
      • ALTER FREEZE PARTITION
    • ALTER VIEW
      • ALTER VIEW REFRESH
      • ALTER VIEW MODIFY QUERY
  • [CREATE]
    • CREATE DATABASE
    • CREATE TABLE
    • CREATE VIEW
    • CREATE DICTIONARY
    • CREATE TEMPORARY TABLE
  • [DROP]
    • DROP DATABASE
    • DROP TABLE
    • DROP VIEW
    • DROP DICTIONARY
  • [TRUNCATE]
  • [OPTIMIZE]
  • [SHOW]
    • SHOW DATABASES
    • SHOW TABLES
    • SHOW COLUMNS
    • SHOW DICTIONARIES
  • [KILL QUERY]
  • [ACCESS MANAGEMENT]
    • CREATE USER
    • ALTER USER
    • DROP USER
    • CREATE ROLE
    • ALTER ROLE
    • DROP ROLE
    • CREATE ROW POLICY
    • ALTER ROW POLICY
    • DROP ROW POLICY
    • CREATE QUOTA
    • ALTER QUOTA
    • DROP QUOTA
    • CREATE SETTINGS PROFILE
    • ALTER SETTINGS PROFILE
    • DROP SETTINGS PROFILE
    • SHOW ACCESS
      • SHOW_USERS
      • SHOW_ROLES
      • SHOW_ROW_POLICIES
      • SHOW_QUOTAS
      • SHOW_SETTINGS_PROFILES
    • ROLE ADMIN
  • [SYSTEM]
    • SYSTEM SHUTDOWN
    • SYSTEM DROP CACHE
      • SYSTEM DROP DNS CACHE
      • SYSTEM DROP MARK CACHE
      • SYSTEM DROP UNCOMPRESSED CACHE
    • SYSTEM RELOAD
      • SYSTEM RELOAD CONFIG
      • SYSTEM RELOAD DICTIONARY
      • SYSTEM RELOAD EMBEDDED DICTIONARIES
    • SYSTEM MERGES
    • SYSTEM TTL MERGES
    • SYSTEM FETCHES
    • SYSTEM MOVES
    • SYSTEM SENDS
      • SYSTEM DISTRIBUTED SENDS
      • SYSTEM REPLICATED SENDS
    • SYSTEM REPLICATION QUEUES
    • SYSTEM SYNC REPLICA
    • SYSTEM RESTART REPLICA
    • SYSTEM FLUSH
      • SYSTEM FLUSH DISTRIBUTED
      • SYSTEM FLUSH LOGS
  • [INTROSPECTION]
    • addressToLine
    • addressToSymbol
    • demangle
  • [SOURCES]
    • FILE
    • URL
    • REMOTE
    • YSQL
    • ODBC
    • JDBC
    • HDFS
    • S3
  • [dictGet]

如何对待该层级的示例:

  • ALTER 权限包含所有其它 ALTER * 的权限
  • ALTER CONSTRAINT 包含 ALTER ADD CONSTRAINTALTER DROP CONSTRAINT权限

权限被应用到不同级别。 Knowing of a level suggests syntax available for privilege.

级别(由低到高):

  • COLUMN - 可以授权到列,表,库或者全局
  • TABLE - 可以授权到表,库,或全局
  • VIEW - 可以授权到视图,库,或全局
  • DICTIONARY - 可以授权到字典,库,或全局
  • DATABASE - 可以授权到数据库或全局
  • GLABLE - 可以授权到全局
  • GROUP - 不同级别的权限分组。当授予 GROUP级别的权限时, 根据所用的语法,只有对应分组中的权限才会被分配。

允许的语法示例:

  • GRANT SELECT(x) ON db.table TO user
  • GRANT SELECT ON db.* TO user

不允许的语法示例:

  • GRANT CREATE USER(x) ON db.table TO user
  • GRANT CREATE USER ON db.* TO user

特殊的权限 ALL 将所有权限授予给用户或角色

默认情况下,一个用户账号或角色没有可授予的权限

如果用户或角色没有任何权限,它将显示为 NONE权限

有些操作根据它们的实现需要一系列的权限。例如, [RENAME]操作需要以下权限来执行:SELECT, CREATE TABLE, INSERTDROP TABLE

SELECT

允许执行 [SELECT] 查询

权限级别: COLUMN.

说明

有该权限的用户可以对指定的表和库的指定列进行 SELECT查询。如果用户查询包含了其它列则结果不返回数据。

考虑如下的授权语句:

GRANT SELECT(x,y) ON db.table TO john

该权限允许 johndb.table表的列x,y执行任意 SELECT查询,例如 SELECT x FROM db.tablejohn 不能执行 SELECT z FROM db.table以及 SELECT * FROM db.table。执行这个查询时,CH不会返回任何数据,甚至 xy列。唯一的例外是,当表仅包含 xy列时。这种情况下,CH返回所有数据。

INSERT

允许执行 [INSERT] 操作.

权限级别: COLUMN.

说明

有该权限的用户可以对指定的表和库的指定列进行 INSERT操作。如果用户查询包含了其它列则结果不返回数据。

示例

GRANT INSERT(x,y) ON db.table TO john

该权限允许 johndb.table表的列x,y执行数据插入操作

ALTER

允许根据下列权限层级执行 [ALTER]操作

  • ALTER. 级别: COLUMN.
    • ALTER TABLE. 级别: GROUP
      • ALTER UPDATE. 级别: COLUMN. 别名: UPDATE
      • ALTER DELETE. 级别: COLUMN. 别名: DELETE
      • ALTER COLUMN. 级别: GROUP
        • ALTER ADD COLUMN. 级别: COLUMN. 别名: ADD COLUMN
        • ALTER DROP COLUMN. 级别: COLUMN. 别名: DROP COLUMN
        • ALTER MODIFY COLUMN. 级别: COLUMN. 别名: MODIFY COLUMN
        • ALTER COMMENT COLUMN. 级别: COLUMN. 别名: COMMENT COLUMN
        • ALTER CLEAR COLUMN. 级别: COLUMN. 别名: CLEAR COLUMN
        • ALTER RENAME COLUMN. 级别: COLUMN. 别名: RENAME COLUMN
      • ALTER INDEX. 级别: GROUP. 别名: INDEX
        • ALTER ORDER BY. 级别: TABLE. 别名: ALTER MODIFY ORDER BY, MODIFY ORDER BY
        • ALTER ADD INDEX. 级别: TABLE. 别名: ADD INDEX
        • ALTER DROP INDEX. 级别: TABLE. 别名: DROP INDEX
        • ALTER MATERIALIZE INDEX. 级别: TABLE. 别名: MATERIALIZE INDEX
        • ALTER CLEAR INDEX. 级别: TABLE. 别名: CLEAR INDEX
      • ALTER CONSTRAINT. 级别: GROUP. 别名: CONSTRAINT
        • ALTER ADD CONSTRAINT. 级别: TABLE. 别名: ADD CONSTRAINT
        • ALTER DROP CONSTRAINT. 级别: TABLE. 别名: DROP CONSTRAINT
      • ALTER TTL. 级别: TABLE. 别名: ALTER MODIFY TTL, MODIFY TTL
      • ALTER MATERIALIZE TTL. 级别: TABLE. 别名: MATERIALIZE TTL
      • ALTER SETTINGS. 级别: TABLE. 别名: ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING
      • ALTER MOVE PARTITION. 级别: TABLE. 别名: ALTER MOVE PART, MOVE PARTITION, MOVE PART
      • ALTER FETCH PARTITION. 级别: TABLE. 别名: FETCH PARTITION
      • ALTER FREEZE PARTITION. 级别: TABLE. 别名: FREEZE PARTITION
    • ALTER VIEW 级别: GROUP
      • ALTER VIEW REFRESH. 级别: VIEW. 别名: ALTER LIVE VIEW REFRESH, REFRESH VIEW
      • ALTER VIEW MODIFY QUERY. 级别: VIEW. 别名: ALTER TABLE MODIFY QUERY

如何对待该层级的示例:

  • ALTER 权限包含所有其它 ALTER * 的权限
  • ALTER CONSTRAINT 包含 ALTER ADD CONSTRAINTALTER DROP CONSTRAINT权限

备注

  • MODIFY SETTING权限允许修改表的引擎设置。它不会影响服务的配置参数
  • ATTACH 操作需要 [CREATE] 权限.
  • DETACH 操作需要 [DROP] 权限.
  • 要通过 [KILL MUTATION] 操作来终止mutation, 你需要有发起mutation操作的权限。例如,当你想终止 ALTER UPDATE操作时,需要有 ALTER UPDATE, ALTER TABLE, 或 ALTER权限

CREATE

允许根据下面的权限层级来执行 [CREATE] 和 [ATTACH] DDL语句:

  • CREATE. 级别: GROUP
    • CREATE DATABASE. 级别: DATABASE
    • CREATE TABLE. 级别: TABLE
    • CREATE VIEW. 级别: VIEW
    • CREATE DICTIONARY. 级别: DICTIONARY
    • CREATE TEMPORARY TABLE. 级别: GLOBAL

备注

  • 删除已创建的表,用户需要 [DROP]权限

DROP

允许根据下面的权限层级来执行 [DROP] 和 [DETACH] :

  • DROP. 级别:
    • DROP DATABASE. 级别: DATABASE
    • DROP TABLE. 级别: TABLE
    • DROP VIEW. 级别: VIEW
    • DROP DICTIONARY. 级别: DICTIONARY

TRUNCATE

允许执行 [TRUNCATE] .

权限级别: TABLE.

OPTIMIZE

允许执行 [OPTIMIZE TABLE] .

权限级别: TABLE.

SHOW

允许根据下面的权限层级来执行 SHOW, DESCRIBE, USE, 和 EXISTS :

  • SHOW. 级别: GROUP
    • SHOW DATABASES. 级别: DATABASE. 允许执行 SHOW DATABASES, SHOW CREATE DATABASE, USE <database> .
    • SHOW TABLES. 级别: TABLE. 允许执行 SHOW TABLES, EXISTS <table>, CHECK <table> .
    • SHOW COLUMNS. 级别: COLUMN. 允许执行 SHOW CREATE TABLE, DESCRIBE .
    • SHOW DICTIONARIES. 级别: DICTIONARY. 允许执行 SHOW DICTIONARIES, SHOW CREATE DICTIONARY, EXISTS <dictionary> .

备注

用户同时拥有 SHOW权限,当用户对指定表,字典或数据库有其它的权限时。

KILL QUERY

允许根据下面的权限层级来执行 [KILL]:

权限级别: GLOBAL.

备注

KILL QUERY 权限允许用户终止其它用户提交的操作。

访问管理

允许用户执行管理用户/角色和行规则的操作:

  • ACCESS MANAGEMENT. 级别: GROUP
    • CREATE USER. 级别: GLOBAL
    • ALTER USER. 级别: GLOBAL
    • DROP USER. 级别: GLOBAL
    • CREATE ROLE. 级别: GLOBAL
    • ALTER ROLE. 级别: GLOBAL
    • DROP ROLE. 级别: GLOBAL
    • ROLE ADMIN. 级别: GLOBAL
    • CREATE ROW POLICY. 级别: GLOBAL. 别名: CREATE POLICY
    • ALTER ROW POLICY. 级别: GLOBAL. 别名: ALTER POLICY
    • DROP ROW POLICY. 级别: GLOBAL. 别名: DROP POLICY
    • CREATE QUOTA. 级别: GLOBAL
    • ALTER QUOTA. 级别: GLOBAL
    • DROP QUOTA. 级别: GLOBAL
    • CREATE SETTINGS PROFILE. 级别: GLOBAL. 别名: CREATE PROFILE
    • ALTER SETTINGS PROFILE. 级别: GLOBAL. 别名: ALTER PROFILE
    • DROP SETTINGS PROFILE. 级别: GLOBAL. 别名: DROP PROFILE
    • SHOW ACCESS. 级别: GROUP
      • SHOW_USERS. 级别: GLOBAL. 别名: SHOW CREATE USER
      • SHOW_ROLES. 级别: GLOBAL. 别名: SHOW CREATE ROLE
      • SHOW_ROW_POLICIES. 级别: GLOBAL. 别名: SHOW POLICIES, SHOW CREATE ROW POLICY, SHOW CREATE POLICY
      • SHOW_QUOTAS. 级别: GLOBAL. 别名: SHOW CREATE QUOTA
      • SHOW_SETTINGS_PROFILES. 级别: GLOBAL. 别名: SHOW PROFILES, SHOW CREATE SETTINGS PROFILE, SHOW CREATE PROFILE

ROLE ADMIN 权限允许用户对角色进行分配以及撤回,包括根据管理选项尚未分配的角色

SYSTEM

允许根据下面的权限层级来执行 [SYSTEM] :

  • SYSTEM. 级别: GROUP
    • SYSTEM SHUTDOWN. 级别: GLOBAL. 别名: SYSTEM KILL, SHUTDOWN
    • SYSTEM DROP CACHE. 别名: DROP CACHE
      • SYSTEM DROP DNS CACHE. 级别: GLOBAL. 别名: SYSTEM DROP DNS, DROP DNS CACHE, DROP DNS
      • SYSTEM DROP MARK CACHE. 级别: GLOBAL. 别名: SYSTEM DROP MARK, DROP MARK CACHE, DROP MARKS
      • SYSTEM DROP UNCOMPRESSED CACHE. 级别: GLOBAL. 别名: SYSTEM DROP UNCOMPRESSED, DROP UNCOMPRESSED CACHE, DROP UNCOMPRESSED
    • SYSTEM RELOAD. 级别: GROUP
      • SYSTEM RELOAD CONFIG. 级别: GLOBAL. 别名: RELOAD CONFIG
      • SYSTEM RELOAD DICTIONARY. 级别: GLOBAL. 别名: SYSTEM RELOAD DICTIONARIES, RELOAD DICTIONARY, RELOAD DICTIONARIES
      • SYSTEM RELOAD EMBEDDED DICTIONARIES. 级别: GLOBAL. 别名: RELOAD EMBEDDED DICTIONARIES
    • SYSTEM MERGES. 级别: TABLE. 别名: SYSTEM STOP MERGES, SYSTEM START MERGES, STOP MERGES, START MERGES
    • SYSTEM TTL MERGES. 级别: TABLE. 别名: SYSTEM STOP TTL MERGES, SYSTEM START TTL MERGES, STOP TTL MERGES, START TTL MERGES
    • SYSTEM FETCHES. 级别: TABLE. 别名: SYSTEM STOP FETCHES, SYSTEM START FETCHES, STOP FETCHES, START FETCHES
    • SYSTEM MOVES. 级别: TABLE. 别名: SYSTEM STOP MOVES, SYSTEM START MOVES, STOP MOVES, START MOVES
    • SYSTEM SENDS. 级别: GROUP. 别名: SYSTEM STOP SENDS, SYSTEM START SENDS, STOP SENDS, START SENDS
      • SYSTEM DISTRIBUTED SENDS. 级别: TABLE. 别名: SYSTEM STOP DISTRIBUTED SENDS, SYSTEM START DISTRIBUTED SENDS, STOP DISTRIBUTED SENDS, START DISTRIBUTED SENDS
      • SYSTEM REPLICATED SENDS. 级别: TABLE. 别名: SYSTEM STOP REPLICATED SENDS, SYSTEM START REPLICATED SENDS, STOP REPLICATED SENDS, START REPLICATED SENDS
    • SYSTEM REPLICATION QUEUES. 级别: TABLE. 别名: SYSTEM STOP REPLICATION QUEUES, SYSTEM START REPLICATION QUEUES, STOP REPLICATION QUEUES, START REPLICATION QUEUES
    • SYSTEM SYNC REPLICA. 级别: TABLE. 别名: SYNC REPLICA
    • SYSTEM RESTART REPLICA. 级别: TABLE. 别名: RESTART REPLICA
    • SYSTEM FLUSH. 级别: GROUP
      • SYSTEM FLUSH DISTRIBUTED. 级别: TABLE. 别名: FLUSH DISTRIBUTED
      • SYSTEM FLUSH LOGS. 级别: GLOBAL. 别名: FLUSH LOGS

SYSTEM RELOAD EMBEDDED DICTIONARIES 权限隐式的通过操作 SYSTEM RELOAD DICTIONARY ON *.* 来进行授权.

内省introspection

允许使用 [introspection] 函数.

  • INTROSPECTION. 级别: GROUP. 别名: INTROSPECTION FUNCTIONS
    • addressToLine. 级别: GLOBAL
    • addressToSymbol. 级别: GLOBAL
    • demangle. 级别: GLOBAL

数据源

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

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

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

示例:

  • 创建 [MySQL table engine], 需要 CREATE TABLE (ON db.table_name)MYSQL权限。4
  • 要使用 [mysql table function],需要 CREATE TEMPORARY TABLEMYSQL 权限

dictGet

  • dictGet. 别名: dictHas, dictGetHierarchy, dictIsIn

允许用户执行 [dictGet], [dictHas], [dictGetHierarchy], [dictIsIn] 等函数.

权限级别: DICTIONARY.

示例

  • GRANT dictGet ON mydb.mydictionary TO john
  • GRANT dictGet ON mydictionary TO john

ALL

对规定的实体(列,表,库等)给用户或角色授予所有权限

NONE

不授予任何权限

ADMIN OPTION

ADMIN OPTION 权限允许用户将他们的角色分配给其它用户

原始文档 <!--hide-->

相关文章