GRANT 语句
- 向 ClickHouse 用户账户或角色授予权限。
- 将角色分配给用户账户或其他角色。
要撤销权限,请使用 REVOKE 语句。还可以使用 SHOW GRANTS 语句列出已授予的权限。
授予权限的语法
privilege— 权限类型。role— ClickHouse 用户角色。user— ClickHouse 用户账户。
WITH GRANT OPTION 子句授予 user 或 role 执行 GRANT 查询的权限。用户只能授予与其自身权限范围相同或更小范围的权限。
WITH REPLACE OPTION 子句会将 user 或 role 的旧权限替换为新权限;如果未指定该子句,则会将新权限追加到现有权限上。
分配角色的语法
role— ClickHouse 用户角色。user— ClickHouse 用户账户。
WITH ADMIN OPTION 子句为 user 或 role 授予 ADMIN OPTION 权限。
WITH REPLACE OPTION 子句会将 user 或 role 的旧角色替换为新角色;如果未指定该子句,则会在原有角色基础上追加新角色。
GRANT CURRENT GRANTS 语法
privilege— 权限类型。role— ClickHouse 用户角色。user— ClickHouse 用户账号。
使用 CURRENT GRANTS 语句可以将所有指定的权限授予指定的用户或角色。
如果未指定任何权限,则给定的用户或角色将获得 CURRENT_USER 的所有可用权限。
用法
要使用 GRANT,你的账户必须具有 GRANT OPTION 权限。你只能在自己账户权限范围内授予权限。
例如,管理员通过如下查询向 john 账户授予了权限:
这意味着 john 拥有执行以下语句的权限:
SELECT x,y FROM db.table。SELECT x FROM db.table。SELECT y FROM db.table。
john 不能执行 SELECT z FROM db.table。SELECT * FROM db.table 也不可用。在处理这个查询时,ClickHouse 不会返回任何数据,连 x 和 y 也不会返回。唯一的例外是,当一个表只包含 x 和 y 两列时,在这种情况下 ClickHouse 会返回所有数据。
此外,john 拥有 GRANT OPTION 权限,因此他可以将相同或更小范围的权限授予其他用户。
对 system 数据库的访问始终是允许的(因为该数据库用于处理查询)。
虽然新用户默认可以访问许多 system 表,但如果没有授权,他们可能默认无法访问每一个 system 表。
另外,出于安全原因,对于 Cloud 用户,访问某些 system 表(如 system.zookeeper)是受限的。
你可以在一个查询中将多个权限授予多个账号。查询 GRANT SELECT, INSERT ON *.* TO john, robin 允许账号 john 和 robin 在服务器上所有数据库的所有表上执行 INSERT 和 SELECT 查询。
通配符授权
在指定权限时,可以使用星号(*)代替表名或数据库名。例如,查询 GRANT SELECT ON db.* TO john 允许 john 在 db 数据库中的所有表上执行 SELECT 查询。
也可以省略数据库名。在这种情况下,权限会授予当前数据库。
例如,GRANT SELECT ON * TO john 会授予当前数据库中所有表的权限,GRANT SELECT ON mytable TO john 会授予当前数据库中 mytable 表的权限。
下文所述的功能从 ClickHouse 24.10 版本开始提供。
还可以在表名或数据库名的末尾使用星号。此功能允许基于表路径的前缀来授予权限。
示例:GRANT SELECT ON db.my_tables* TO john。该查询允许 john 在 db 数据库中所有以 my_tables 为前缀的表上执行 SELECT 查询。
更多示例:
GRANT SELECT ON db.my_tables* TO john
GRANT SELECT ON db*.* TO john
在已授予权限的路径中新建的所有表都会自动继承其父对象上的所有授权。
例如,如果你运行 GRANT SELECT ON db.* TO john 查询,然后创建一个新表 db.new_table,则用户 john 将能够运行 SELECT * FROM db.new_table 查询。
星号(*)只能用于前缀:
权限
权限是授予用户的操作许可,用于执行特定类型的查询。
权限具有层级结构,具体允许执行哪些查询取决于权限的作用范围。
ClickHouse 中的权限层级如下所示:
ALL访问控制ALLOW SQL SECURITY NONEALTER QUOTAALTER ROLEALTER ROW POLICYALTER SETTINGS PROFILEALTER USERCREATE QUOTACREATE ROLECREATE ROW POLICYCREATE SETTINGS PROFILECREATE USERDROP QUOTADROP ROLEDROP ROW POLICYDROP SETTINGS PROFILEDROP USERROLE ADMINSHOW ACCESSSHOW QUOTASSHOW ROLESSHOW ROW POLICIESSHOW SETTINGS PROFILESSHOW USERS
ALTERALTER DATABASEALTER DATABASE SETTINGS
ALTER TABLEALTER COLUMNALTER ADD COLUMNALTER CLEAR COLUMNALTER COMMENT COLUMNALTER DROP COLUMNALTER MATERIALIZE COLUMNALTER MODIFY COLUMNALTER RENAME COLUMN
ALTER CONSTRAINTALTER ADD CONSTRAINTALTER DROP CONSTRAINT
ALTER DELETEALTER FETCH PARTITIONALTER FREEZE PARTITIONALTER INDEXALTER ADD INDEXALTER CLEAR INDEXALTER DROP INDEXALTER MATERIALIZE INDEXALTER ORDER BYALTER SAMPLE BY
ALTER MATERIALIZE TTLALTER MODIFY COMMENTALTER MOVE PARTITIONALTER PROJECTIONALTER SETTINGSALTER STATISTICSALTER ADD STATISTICSALTER DROP STATISTICSALTER MATERIALIZE STATISTICSALTER MODIFY STATISTICS
ALTER TTLALTER UPDATE
ALTER VIEWALTER VIEW MODIFY QUERYALTER VIEW REFRESHALTER VIEW MODIFY SQL SECURITY
BACKUPCLUSTERCREATECREATE ARBITRARY TEMPORARY TABLECREATE TEMPORARY TABLE
CREATE DATABASECREATE DICTIONARYCREATE FUNCTIONCREATE RESOURCECREATE TABLECREATE VIEWCREATE WORKLOAD
dictGetdisplaySecretsInShowAndSelectDROPDROP DATABASEDROP DICTIONARYDROP FUNCTIONDROP RESOURCEDROP TABLEDROP VIEWDROP WORKLOAD
INSERT内省addressToLineaddressToLineWithInlinesaddressToSymboldemangle
KILL QUERYKILL TRANSACTION在分片之间移动分区命名集合管理ALTER NAMED COLLECTIONCREATE NAMED COLLECTIONDROP NAMED COLLECTIONNAMED COLLECTIONSHOW NAMED COLLECTIONSSHOW NAMED COLLECTIONS SECRETS
OPTIMIZESELECTSET DEFINERSHOWSHOW COLUMNSSHOW DATABASESSHOW DICTIONARIESSHOW TABLES
SHOW FILESYSTEM CACHES来源AZUREFILEHDFSHIVEJDBCKAFKAMONGOMYSQLNATSODBCPOSTGRESRABBITMQREDISREMOTES3SQLITEURL
SYSTEMSYSTEM CLEANUPSYSTEM DROP CACHESYSTEM DROP COMPILED EXPRESSION CACHESYSTEM DROP CONNECTIONS CACHESYSTEM DROP DISTRIBUTED CACHESYSTEM DROP DNS CACHESYSTEM DROP FILESYSTEM CACHESYSTEM DROP FORMAT SCHEMA CACHESYSTEM DROP MARK CACHESYSTEM DROP MMAP CACHESYSTEM DROP PAGE CACHESYSTEM DROP PRIMARY INDEX CACHESYSTEM DROP QUERY CACHESYSTEM DROP S3 CLIENT CACHESYSTEM DROP SCHEMA CACHESYSTEM DROP UNCOMPRESSED CACHE
SYSTEM DROP PRIMARY INDEX CACHESYSTEM DROP REPLICASYSTEM FAILPOINTSYSTEM FETCHESSYSTEM FLUSHSYSTEM FLUSH ASYNC INSERT QUEUESYSTEM FLUSH LOGS
SYSTEM JEMALLOCSYSTEM KILL QUERYSYSTEM KILL TRANSACTIONSYSTEM LISTENSYSTEM LOAD PRIMARY KEYSYSTEM MERGESSYSTEM MOVESSYSTEM PULLING REPLICATION LOGSYSTEM REDUCE BLOCKING PARTSSYSTEM REPLICATION QUEUESSYSTEM REPLICA READINESSSYSTEM RESTART DISKSYSTEM RESTART REPLICASYSTEM RESTORE REPLICASYSTEM RELOADSYSTEM RELOAD ASYNCHRONOUS METRICSSYSTEM RELOAD CONFIGSYSTEM RELOAD DICTIONARYSYSTEM RELOAD EMBEDDED DICTIONARIESSYSTEM RELOAD FUNCTIONSYSTEM RELOAD MODELSYSTEM RELOAD USERS
SYSTEM SENDSSYSTEM DISTRIBUTED SENDSSYSTEM REPLICATED SENDS
SYSTEM SHUTDOWNSYSTEM SYNC DATABASE REPLICASYSTEM SYNC FILE CACHESYSTEM SYNC FILESYSTEM CACHESYSTEM SYNC REPLICASYSTEM SYNC TRANSACTION LOGSYSTEM THREAD FUZZERSYSTEM TTL MERGESSYSTEM UNFREEZESYSTEM UNLOAD PRIMARY KEYSYSTEM VIEWSSYSTEM VIRTUAL PARTS UPDATESYSTEM WAIT LOADING PARTS
TABLE ENGINETRUNCATEUNDROP TABLE
NONE
此层级结构的处理示例:
ALTER权限包含所有其他ALTER*权限。ALTER CONSTRAINT包含ALTER ADD CONSTRAINT和ALTER DROP CONSTRAINT权限。
权限可以应用在不同的层级上。了解各层级有助于理解可用于授予权限的语法。
层级(从低到高):
COLUMN— 权限可以授予列、表、数据库或全局。TABLE— 权限可以授予表、数据库或全局。VIEW— 权限可以授予视图、数据库或全局。DICTIONARY— 权限可以授予字典、数据库或全局。DATABASE— 权限可以授予数据库或全局。GLOBAL— 权限只能全局授予。GROUP— 将不同层级的权限进行分组。当授予GROUP层级的权限时,仅会授予与所使用语法相对应的那部分组内权限。
允许使用的语法示例:
GRANT SELECT(x) ON db.table TO userGRANT SELECT ON db.* TO user
不允许使用的语法示例:
GRANT CREATE USER(x) ON db.table TO userGRANT CREATE USER ON db.* TO user
特殊权限 ALL 会为用户账号或角色授予所有权限。
默认情况下,用户账号或角色不具有任何权限。
如果用户或角色没有任何权限,则会显示为 NONE 权限。
某些查询在其实现上需要一组权限。例如,要执行 RENAME 查询,需要具有以下权限:SELECT、CREATE TABLE、INSERT 和 DROP TABLE。
SELECT
允许执行 SELECT 查询。
权限层级:COLUMN。
描述
被授予此权限的用户可以在指定数据库和表中,对指定的列列表执行 SELECT 查询。如果用户在查询中包含了未被授权的其他列,则查询不会返回任何数据。
考虑以下权限:
此权限允许 john 执行任何涉及 db.table 中 x 和/或 y 列数据的 SELECT 查询,例如 SELECT x FROM db.table。john 不能执行 SELECT z FROM db.table。SELECT * FROM db.table 也不可用。在处理该查询时,ClickHouse 不会返回任何数据,哪怕是 x 和 y。唯一的例外是当某个表只包含 x 和 y 两列时,在这种情况下 ClickHouse 会返回所有数据。
INSERT
允许执行 INSERT 查询。
权限级别:COLUMN。
描述
被授予此权限的用户可以在指定数据库中的指定表上,针对指定列列表执行 INSERT 查询。如果用户在查询中包含了未被指定的其他列,该查询将不会插入任何数据。
示例
被授予的权限允许 john 向 db.table 的 x 和/或 y 列插入数据。
ALTER
允许根据以下权限层级执行 ALTER 查询:
ALTER。级别:COLUMN。ALTER TABLE。级别:GROUPALTER UPDATE。级别:COLUMN。别名:UPDATEALTER DELETE。级别:COLUMN。别名:DELETEALTER COLUMN。级别:GROUPALTER ADD COLUMN。级别:COLUMN。别名:ADD COLUMNALTER DROP COLUMN。级别:COLUMN。别名:DROP COLUMNALTER MODIFY COLUMN。级别:COLUMN。别名:MODIFY COLUMNALTER COMMENT COLUMN。级别:COLUMN。别名:COMMENT COLUMNALTER CLEAR COLUMN。级别:COLUMN。别名:CLEAR COLUMNALTER RENAME COLUMN。级别:COLUMN。别名:RENAME COLUMNALTER INDEX。级别:GROUP。别名:INDEXALTER ORDER BY。级别:TABLE。别名:ALTER MODIFY ORDER BY、MODIFY ORDER BYALTER SAMPLE BY。级别:TABLE。别名:ALTER MODIFY SAMPLE BY、MODIFY SAMPLE BYALTER ADD INDEX。级别:TABLE。别名:ADD INDEXALTER DROP INDEX。级别:TABLE。别名:DROP INDEXALTER MATERIALIZE INDEX。级别:TABLE。别名:MATERIALIZE INDEXALTER CLEAR INDEX。级别:TABLE。别名:CLEAR INDEXALTER CONSTRAINT。级别:GROUP。别名:CONSTRAINTALTER ADD CONSTRAINT。级别:TABLE。别名:ADD CONSTRAINTALTER DROP CONSTRAINT。级别:TABLE。别名:DROP CONSTRAINTALTER TTL。级别:TABLE。别名:ALTER MODIFY TTL、MODIFY TTLALTER MATERIALIZE TTL。级别:TABLE。别名:MATERIALIZE TTLALTER SETTINGS。级别:TABLE。别名:ALTER SETTING、ALTER MODIFY SETTING、MODIFY SETTINGALTER MOVE PARTITION。级别:TABLE。别名:ALTER MOVE PART、MOVE PARTITION、MOVE PARTALTER FETCH PARTITION。级别:TABLE。别名:ALTER FETCH PART、FETCH PARTITION、FETCH PARTALTER FREEZE PARTITION。级别:TABLE。别名:FREEZE PARTITIONALTER VIEW。级别:GROUPALTER VIEW REFRESH。级别:VIEW。别名:REFRESH VIEWALTER VIEW MODIFY QUERY。级别:VIEW。别名:ALTER TABLE MODIFY QUERYALTER VIEW MODIFY SQL SECURITY。级别:VIEW。别名:ALTER TABLE MODIFY SQL SECURITY
以下示例说明该层级结构的含义:
ALTER权限包含所有其他ALTER*权限。ALTER CONSTRAINT包含ALTER ADD CONSTRAINT和ALTER DROP CONSTRAINT权限。
注意
MODIFY SETTING权限允许修改表引擎设置。它不会影响设置或服务器配置参数。ATTACH操作需要 CREATE 权限。DETACH操作需要 DROP 权限。- 要通过 KILL MUTATION 查询停止一次变更操作,你需要拥有启动该变更的权限。例如,如果你想停止
ALTER UPDATE查询,你需要具有ALTER UPDATE、ALTER TABLE或ALTER权限。
BACKUP
允许在查询中执行 [BACKUP]。关于备份的更多信息,请参阅 "Backup and Restore"。
CREATE
允许根据以下权限层级结构执行 CREATE 和 ATTACH DDL 查询:
CREATE。级别:GROUPCREATE DATABASE。级别:DATABASECREATE TABLE。级别:TABLECREATE ARBITRARY TEMPORARY TABLE。级别:GLOBALCREATE TEMPORARY TABLE。级别:GLOBAL
CREATE VIEW。级别:VIEWCREATE DICTIONARY。级别:DICTIONARY
注意
- 要删除已创建的表,用户需要 DROP。
CLUSTER
允许执行 ON CLUSTER 查询。
默认情况下,使用 ON CLUSTER 的查询要求用户具有 CLUSTER 权限。
如果在未先授予 CLUSTER 权限的情况下在查询中尝试使用 ON CLUSTER,将会收到如下错误:
可以通过将 config.xml 中 access_control_improvements 部分里的 on_cluster_queries_require_cluster_grant 设置为 false(见下文),来更改默认行为。
DROP
允许根据以下权限层级执行 DROP 和 DETACH 查询:
DROP。级别:GROUPDROP DATABASE。级别:DATABASEDROP TABLE。级别:TABLEDROP VIEW。级别:VIEWDROP DICTIONARY。级别:DICTIONARY
TRUNCATE
允许执行 TRUNCATE 查询。
权限级别:TABLE。
OPTIMIZE
允许执行 OPTIMIZE TABLE 查询。
权限级别:TABLE。
SHOW
允许根据以下权限层级执行 SHOW、DESCRIBE、USE 和 EXISTS 查询:
SHOW。级别:GROUPSHOW 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
允许用户执行用于管理用户、角色和行级策略的相关查询。
ACCESS MANAGEMENT. 级别:GROUPCREATE USER. 级别:GLOBALALTER USER. 级别:GLOBALDROP USER. 级别:GLOBALCREATE ROLE. 级别:GLOBALALTER ROLE. 级别:GLOBALDROP ROLE. 级别:GLOBALROLE ADMIN. 级别:GLOBALCREATE ROW POLICY. 级别:GLOBAL。别名:CREATE POLICYALTER ROW POLICY. 级别:GLOBAL。别名:ALTER POLICYDROP ROW POLICY. 级别:GLOBAL。别名:DROP POLICYCREATE QUOTA. 级别:GLOBALALTER QUOTA. 级别:GLOBALDROP QUOTA. 级别:GLOBALCREATE SETTINGS PROFILE. 级别:GLOBAL。别名:CREATE PROFILEALTER SETTINGS PROFILE. 级别:GLOBAL。别名:ALTER PROFILEDROP SETTINGS PROFILE. 级别:GLOBAL。别名:DROP PROFILESHOW ACCESS. 级别:GROUPSHOW_USERS. 级别:GLOBAL。别名:SHOW CREATE USERSHOW_ROLES. 级别:GLOBAL。别名:SHOW CREATE ROLESHOW_ROW_POLICIES. 级别:GLOBAL。别名:SHOW POLICIES,SHOW CREATE ROW POLICY,SHOW CREATE POLICYSHOW_QUOTAS. 级别:GLOBAL。别名:SHOW CREATE QUOTASHOW_SETTINGS_PROFILES. 级别:GLOBAL。别名:SHOW PROFILES,SHOW CREATE SETTINGS PROFILE,SHOW CREATE PROFILE
ALLOW SQL SECURITY NONE. 级别:GLOBAL。别名:CREATE SQL SECURITY NONE,SQL SECURITY NONE,SECURITY NONE
ROLE ADMIN 权限允许用户分配和撤销任意角色,包括那些未以管理员选项授予给该用户的角色。
SYSTEM
允许用户根据以下权限层级执行 SYSTEM 查询。
SYSTEM. 级别:GROUPSYSTEM SHUTDOWN. 级别:GLOBAL。别名:SYSTEM KILL,SHUTDOWNSYSTEM DROP CACHE. 别名:DROP CACHESYSTEM DROP DNS CACHE. 级别:GLOBAL。别名:SYSTEM DROP DNS,DROP DNS CACHE,DROP DNSSYSTEM DROP MARK CACHE. 级别:GLOBAL。别名:SYSTEM DROP MARK,DROP MARK CACHE,DROP MARKSSYSTEM DROP UNCOMPRESSED CACHE. 级别:GLOBAL。别名:SYSTEM DROP UNCOMPRESSED,DROP UNCOMPRESSED CACHE,DROP UNCOMPRESSED
SYSTEM RELOAD. 级别:GROUPSYSTEM RELOAD CONFIG. 级别:GLOBAL。别名:RELOAD CONFIGSYSTEM RELOAD DICTIONARY. 级别:GLOBAL。别名:SYSTEM RELOAD DICTIONARIES,RELOAD DICTIONARY,RELOAD DICTIONARIESSYSTEM RELOAD EMBEDDED DICTIONARIES. 级别:GLOBAL。别名:RELOAD EMBEDDED DICTIONARIES
SYSTEM MERGES. 级别:TABLE。别名:SYSTEM STOP MERGES,SYSTEM START MERGES,STOP MERGES,START MERGESSYSTEM TTL MERGES. 级别:TABLE。别名:SYSTEM STOP TTL MERGES,SYSTEM START TTL MERGES,STOP TTL MERGES,START TTL MERGESSYSTEM FETCHES. 级别:TABLE。别名:SYSTEM STOP FETCHES,SYSTEM START FETCHES,STOP FETCHES,START FETCHESSYSTEM MOVES. 级别:TABLE。别名:SYSTEM STOP MOVES,SYSTEM START MOVES,STOP MOVES,START MOVESSYSTEM SENDS. 级别:GROUP。别名:SYSTEM STOP SENDS,SYSTEM START SENDS,STOP SENDS,START SENDSSYSTEM DISTRIBUTED SENDS. 级别:TABLE。别名:SYSTEM STOP DISTRIBUTED SENDS,SYSTEM START DISTRIBUTED SENDS,STOP DISTRIBUTED SENDS,START DISTRIBUTED SENDSSYSTEM 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 QUEUESSYSTEM SYNC REPLICA. 级别:TABLE。别名:SYNC REPLICASYSTEM RESTART REPLICA. 级别:TABLE。别名:RESTART REPLICASYSTEM FLUSH. 级别:GROUPSYSTEM FLUSH DISTRIBUTED. 级别:TABLE。别名:FLUSH DISTRIBUTEDSYSTEM FLUSH LOGS. 级别:GLOBAL。别名:FLUSH LOGS
SYSTEM RELOAD EMBEDDED DICTIONARIES 权限会通过 SYSTEM RELOAD DICTIONARY ON *.* 权限被隐式授予。
INTROSPECTION
允许使用 introspection 函数。
INTROSPECTION. 级别:GROUP。别名:INTROSPECTION FUNCTIONSaddressToLine. 级别:GLOBALaddressToLineWithInlines. 级别:GLOBALaddressToSymbol. 级别:GLOBALdemangle. 级别:GLOBAL
SOURCES
READ. 级别:GLOBAL_WITH_PARAMETERWRITE. 级别:GLOBAL_WITH_PARAMETER
可能的参数:
AZUREFILEHDFSHIVEJDBCKAFKAMONGOMYSQLNATSODBCPOSTGRESRABBITMQREDISREMOTES3SQLITEURL
对数据源的读/写权限分离自 25.7 版本起可用,并且仅在服务器设置
access_control_improvements.enable_read_write_grants
启用时生效。
否则,你应使用语法 GRANT AZURE ON *.* TO user,它等价于新的 GRANT READ, WRITE ON AZURE TO user。
示例:
- 要使用 MySQL table engine 创建表,你需要
CREATE TABLE (ON db.table_name)和MYSQL权限。 - 要使用 mysql table function,你需要
CREATE TEMPORARY TABLE和MYSQL权限。
源过滤授权(Source Filter Grants)
该功能自 25.8 版本起可用,并且仅在服务器设置
access_control_improvements.enable_read_write_grants
启用时生效。
你可以通过正则表达式过滤器来授予对特定源 URI 的访问权限,从而对用户可以访问的外部数据源进行细粒度控制。
语法:
此授权仅允许用户读取与指定正则表达式模式匹配的 S3 URI。
示例:
授予对特定 S3 存储桶路径的访问权限:
Source filter 接受 regexp 作为参数,因此如下授权语句:
GRANT READ ON URL('http://www.google.com') TO john;
将允许以下查询
因为在正则表达式中,. 会被视为“任意单个字符”(Any Single Character)。
这可能会导致潜在的安全漏洞。正确的授权语句应该是
使用 GRANT OPTION 重新授予权限:
如果原始授权包含 WITH GRANT OPTION 选项,可以使用 GRANT CURRENT GRANTS 重新授予权限:
重要限制:
- 不允许部分撤销: 不能只撤销已授予过滤模式中的一部分。如果需要更改,必须撤销整个授权,并使用新的模式重新授权。
- 不允许使用通配符授权: 不能使用
GRANT READ ON *('regexp')或类似仅包含通配符的模式。必须提供具体的源(source)。
dictGet
dictGet。别名:dictHas、dictGetHierarchy、dictIsIn
允许用户执行 dictGet、dictHas、dictGetHierarchy、dictIsIn 函数。
权限级别:DICTIONARY。
示例
GRANT dictGet ON mydb.mydictionary TO johnGRANT dictGet ON mydictionary TO john
displaySecretsInShowAndSelect
如果同时开启
display_secrets_in_show_and_select 服务器设置
和
format_display_secrets_in_show_and_select 格式设置,则允许用户在 SHOW 和 SELECT 查询中查看机密信息(secrets)。
NAMED COLLECTION ADMIN
允许对指定的命名集合(named collection)执行特定操作。在 23.7 版本之前,它被称为 NAMED COLLECTION CONTROL,自 23.7 起新增了 NAMED COLLECTION ADMIN,并保留 NAMED COLLECTION CONTROL 作为其别名。
NAMED COLLECTION ADMIN。级别:NAMED_COLLECTION。别名:NAMED COLLECTION CONTROLCREATE NAMED COLLECTION。级别:NAMED_COLLECTIONDROP NAMED COLLECTION。级别:NAMED_COLLECTIONALTER NAMED COLLECTION。级别:NAMED_COLLECTIONSHOW NAMED COLLECTIONS。级别:NAMED_COLLECTION。别名:SHOW NAMED COLLECTIONSSHOW NAMED COLLECTIONS SECRETS。级别:NAMED_COLLECTION。别名:SHOW NAMED COLLECTIONS SECRETSNAMED COLLECTION。级别:NAMED_COLLECTION。别名:NAMED COLLECTION USAGE, USE NAMED COLLECTION
与其他所有授权(CREATE、DROP、ALTER、SHOW)不同,授权 NAMED COLLECTION 仅在 23.7 中添加,而其他所有授权更早在 22.12 中就已添加。
示例
假设一个 named collection 名为 abc,我们将 CREATE NAMED COLLECTION 权限授予用户 john。
GRANT CREATE NAMED COLLECTION ON abc TO john
TABLE ENGINE
允许在创建表时使用指定的表引擎。适用于表引擎。
示例
GRANT TABLE ENGINE ON * TO johnGRANT TABLE ENGINE ON TinyLog TO john
ALL
授予用户账户或角色对受管对象的所有权限。
在 ClickHouse Cloud 中不支持 ALL 权限,其中 default 用户的权限是受限的。用户可以通过授予 default_role 来为某个用户授予最大权限。有关更多详情,请参见此处。
用户还可以以 default 用户身份使用 GRANT CURRENT GRANTS 来实现与 ALL 类似的效果。
NONE
不会授予任何权限。
ADMIN OPTION
ADMIN OPTION 权限允许用户将其角色授予另一个用户。