ClickHouse/docs/zh/sql-reference/statements/grant.md
2022-04-10 17:08:18 -06:00

20 KiB
Raw Blame History

sidebar_position sidebar_label
39 授权操作

授权

  • 给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] [WITH REPLACE OPTION]
  • privilege — 权限类型
  • role — 用户角色
  • user — 用户账号

WITH GRANT OPTION 授予 userrole执行 GRANT 操作的权限。用户可将在自身权限范围内的权限进行授权 WITH REPLACE OPTION 以当前sql里的新权限替代掉 userrole的旧权限,如果没有该选项则是追加授权。

角色分配的语法

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

WITH ADMIN OPTION 授予 userrole 执行ADMIN OPTION 的权限 WITH REPLACE OPTION 以当前sql里的新role替代掉 userrole的旧role如果没有该选项则是追加roles。

用法

使用 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

允许根据下面的权限层级来执行 CREATEATTACH DDL语句:

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

备注

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

DROP

允许根据下面的权限层级来执行 DROPDETACH :

  • 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 enginestable functions中使用外部数据源。

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

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

示例:

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 权限允许用户将他们的角色分配给其它用户

原始文档