GRANT
GRANT
- ClickHouse 사용자 계정 또는 역할에 privileges을 부여합니다.
- 사용자 계정 또는 다른 역할에 역할을 할당합니다.
권한을 회수하려면 REVOKE 문을 사용하세요. 또한 SHOW GRANTS 문으로 부여된 권한을 나열할 수 있습니다.
출처: 문서
본문
Granting Privilege Syntax
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— ClickHouse 사용자 역할.user— ClickHouse 사용자 계정.
WITH GRANT OPTION 절은 user 또는 role에게 GRANT 쿼리를 실행할 권한을 부여합니다. 사용자는 자신이 가진 것과 같은 범위 이하의 권한을 부여할 수 있습니다.
WITH REPLACE OPTION 절은 user 또는 role에 대해 이전 권한을 새 권한으로 대체하며, 지정되지 않으면 권한을 추가합니다.
Assigning Role Syntax
GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION] [WITH REPLACE OPTION]
role— ClickHouse 사용자 역할.user— ClickHouse 사용자 계정.
WITH ADMIN OPTION 절은 user 또는 role에게 ADMIN OPTION 권한을 부여합니다.
WITH REPLACE OPTION 절은 user 또는 role에 대해 이전 역할을 새 역할로 대체하며, 지정되지 않으면 역할을 추가합니다.
Grant Current Grants Syntax
GRANT CURRENT GRANTS{(privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*}) | ON {db.table|db.*|*.*|table|*}} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION] [WITH REPLACE OPTION]
privilege— 권한 유형.role— ClickHouse 사용자 역할.user— ClickHouse 사용자 계정.
CURRENT GRANTS 문을 사용하면 지정된 모든 권한을 주어진 사용자 또는 역할에 부여할 수 있습니다.
권한이 하나도 지정되지 않으면 주어진 사용자 또는 역할은 CURRENT_USER에 사용할 수 있는 모든 권한을 받습니다.
Usage
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 * FROM db.table도 사용할 수 없습니다. 이 쿼리를 처리할 때 ClickHouse는 x와 y조차도 데이터를 반환하지 않습니다. 유일한 예외는 테이블에 x와 y 컬럼만 있는 경우입니다. 이 경우 ClickHouse는 모든 데이터를 반환합니다.
또한 john은 GRANT OPTION 권한이 있으므로 다른 사용자에게 같은 또는 더 작은 범위의 권한을 부여할 수 있습니다.
system 데이터베이스에 대한 접근은 항상 허용됩니다(이 데이터베이스는 쿼리 처리에 사용되므로).
새 사용자가 기본적으로 접근할 수 있는 시스템 테이블이 많지만, 부여 없이 모든 시스템 테이블에 기본적으로 접근할 수 있는 것은 아닙니다.
또한 system.zookeeper 같은 특정 시스템 테이블에 대한 접근은 보안상의 이유로 Cloud 사용자에게 제한됩니다.
한 쿼리에서 여러 계정에 여러 권한을 부여할 수 있습니다. 쿼리 GRANT SELECT, INSERT ON *.* TO john, robin은 john과 robin 계정이 서버의 모든 데이터베이스의 모든 테이블에 대해 INSERT와 SELECT 쿼리를 실행할 수 있게 합니다.
Wildcard grants
권한을 지정할 때 테이블이나 데이터베이스 이름 대신 asterisk(*)를 사용할 수 있습니다. 예를 들어 GRANT SELECT ON db.* TO john 쿼리는 john이 db 데이터베이스의 모든 테이블에 대해 SELECT 쿼리를 실행할 수 있게 합니다.
또한 데이터베이스 이름을 생략할 수 있습니다. 이 경우 권한은 현재 데이터베이스에 부여됩니다.
예를 들어 GRANT SELECT ON * TO john은 현재 데이터베이스의 모든 테이블에 권한을 부여하고, GRANT SELECT ON mytable TO john은 현재 데이터베이스의 mytable 테이블에 권한을 부여합니다.
아래에 설명된 기능은 24.10 ClickHouse 버전부터 사용할 수 있습니다.
테이블이나 데이터베이스 이름의 끝에도 asterisk를 넣을 수 있습니다. 이 기능은 테이블 경로의 추상 접두사에 권한을 부여할 수 있게 해줍니다.
예: GRANT SELECT ON db.my_tables* TO john. 이 쿼리는 john이 db 데이터베이스에서 my_tables* 접두사를 가진 모든 테이블에 대해 SELECT 쿼리를 실행할 수 있게 합니다.
More examples:
GRANT SELECT ON db.my_tables* TO john
SELECT * FROM db.my_tables -- granted
SELECT * FROM db.my_tables_0 -- granted
SELECT * FROM db.my_tables_1 -- granted
SELECT * FROM db.other_table -- not_granted
SELECT * FROM db2.my_tables -- not_granted
GRANT SELECT ON db*.* TO john
SELECT * FROM db.my_tables -- granted
SELECT * FROM db.my_tables_0 -- granted
SELECT * FROM db.my_tables_1 -- granted
SELECT * FROM db.other_table -- granted
SELECT * FROM db2.my_tables -- granted
부여된 경로 내에서 새로 생성된 모든 테이블은 부모로부터 모든 grant를 자동으로 상속합니다.
예를 들어 GRANT SELECT ON db.* TO john 쿼리를 실행한 다음 새 테이블 db.new_table을 만들면, 사용자 john은 SELECT * FROM db.new_table 쿼리를 실행할 수 있습니다.
asterisk는 접두사에만 지정할 수 있습니다:
GRANT SELECT ON db.* TO john -- correct
GRANT SELECT ON db*.* TO john -- correct
GRANT SELECT ON *.my_table TO john -- wrong
GRANT SELECT ON foo*bar TO john -- wrong
GRANT SELECT ON *suffix TO john -- wrong
GRANT SELECT(foo) ON db.table* TO john -- wrong
Privileges
Privilege는 사용자에게 특정 종류의 쿼리를 실행하도록 주어진 권한입니다.
Privilege는 계층 구조를 가지며, 허용된 쿼리 집합은 권한 범위에 따라 달라집니다.
ClickHouse의 권한 계층은 아래에 표시됩니다:
ALLOW SQL SECURITY NONE
ALTER QUOTA
ALTER ROLE
ALTER ROW POLICY
ALTER SETTINGS PROFILE
ALTER USER
CREATE QUOTA
CREATE ROLE
CREATE ROW POLICY
CREATE SETTINGS PROFILE
CREATE TOKEN
CREATE USER
DROP QUOTA
DROP ROLE
DROP ROW POLICY
DROP SETTINGS PROFILE
DROP USER
ROLE ADMIN
SHOW ACCESS
SHOW QUOTAS
SHOW ROLES
SHOW ROW POLICIES
SHOW SETTINGS PROFILES
SHOW USERS
ALTER DATABASE
ALTER DATABASE SETTINGS
ALTER TABLE
ALTER COLUMN
ALTER ADD COLUMN
ALTER CLEAR COLUMN
ALTER COMMENT COLUMN
ALTER DROP COLUMN
ALTER MATERIALIZE COLUMN
ALTER MODIFY COLUMN
ALTER RENAME COLUMN
ALTER CONSTRAINT
ALTER ADD CONSTRAINT
ALTER DROP CONSTRAINT
ALTER MODIFY CONSTRAINT
ALTER DELETE
ALTER FETCH PARTITION
ALTER FREEZE PARTITION
ALTER INDEX
ALTER ADD INDEX
ALTER CLEAR INDEX
ALTER DROP INDEX
ALTER MATERIALIZE INDEX
ALTER ORDER BY
ALTER SAMPLE BY
ALTER MATERIALIZE TTL
ALTER MODIFY COMMENT
ALTER MOVE PARTITION
ALTER PROJECTION
ALTER SETTINGS
ALTER STATISTICS
ALTER ADD STATISTICS
ALTER DROP STATISTICS
ALTER MATERIALIZE STATISTICS
ALTER MODIFY STATISTICS
ALTER TTL
ALTER UPDATE
ALTER TABLE EXECUTE
ALTER VIEW
ALTER VIEW MODIFY QUERY
ALTER VIEW REFRESH
ALTER VIEW MODIFY SQL SECURITY
CREATE ARBITRARY TEMPORARY TABLE
CREATE TEMPORARY TABLE
CREATE DATABASE
CREATE DICTIONARY
CREATE FUNCTION
CREATE RESOURCE
CREATE TABLE
CREATE VIEW
CREATE WORKLOAD
dictGet
displaySecretsInShowAndSelect
DROP
DROP DATABASE
DROP DICTIONARY
DROP FUNCTION
DROP RESOURCE
DROP TABLE
DROP VIEW
DROP WORKLOAD
addressToLine
addressToLineWithInlines
addressToSymbol
demangle
KILL QUERY
KILL TRANSACTION
MOVE PARTITION BETWEEN SHARDS
NAMED COLLECTION ADMIN
ALTER NAMED COLLECTION
CREATE NAMED COLLECTION
DROP NAMED COLLECTION
NAMED COLLECTION
SHOW NAMED COLLECTIONS
SHOW NAMED COLLECTIONS SECRETS
OPTIMIZE
SELECT
SET DEFINER
SHOW
SHOW COLUMNS
SHOW DATABASES
SHOW DICTIONARIES
SHOW TABLES
SHOW FILESYSTEM CACHES
SOURCES
AZURE
BIGQUERY
DISK
FILE
HDFS
HIVE
JDBC
KAFKA
MONGO
MYSQL
NATS
ODBC
POSTGRES
RABBITMQ
REDIS
REMOTE
S3
SQLITE
URL
SYSTEM BACKGROUND
SYSTEM STREAMING ENGINES
SYSTEM VIEWS
SYSTEM CLEANUP
SYSTEM DROP CACHE
SYSTEM DROP COMPILED EXPRESSION CACHE
SYSTEM DROP CONNECTIONS CACHE
SYSTEM DROP DISTRIBUTED CACHE
SYSTEM DROP DNS CACHE
SYSTEM DROP FILESYSTEM CACHE
SYSTEM DROP FORMAT SCHEMA CACHE
SYSTEM DROP MARK CACHE
SYSTEM DROP MMAP CACHE
SYSTEM DROP PAGE CACHE
SYSTEM DROP PRIMARY INDEX CACHE
SYSTEM DROP QUERY CACHE
SYSTEM DROP S3 CLIENT CACHE
SYSTEM DROP SCHEMA CACHE
SYSTEM DROP UNCOMPRESSED CACHE
SYSTEM DROP REPLICA
SYSTEM FAILPOINT
SYSTEM FETCHES
SYSTEM FLUSH
SYSTEM FLUSH ASYNC INSERT QUEUE
SYSTEM FLUSH LOGS
SYSTEM JEMALLOC
SYSTEM LISTEN
SYSTEM LOAD PRIMARY KEY
SYSTEM MERGES
SYSTEM MOVES
SYSTEM PULLING REPLICATION LOG
SYSTEM REDUCE BLOCKING PARTS
SYSTEM REPLICATION QUEUES
SYSTEM REPLICA READINESS
SYSTEM RESET DDL WORKER
SYSTEM RESTART DISK
SYSTEM RESTART REPLICA
SYSTEM RESTORE REPLICA
SYSTEM RELOAD
SYSTEM RELOAD ASYNCHRONOUS METRICS
SYSTEM RELOAD CONFIG
SYSTEM RELOAD DICTIONARY
SYSTEM RELOAD EMBEDDED DICTIONARIES
SYSTEM RELOAD FUNCTION
SYSTEM RELOAD USERS
SYSTEM SENDS
SYSTEM DISTRIBUTED SENDS
SYSTEM REPLICATED SENDS
SYSTEM SHUTDOWN
SYSTEM SYNC DATABASE REPLICA
SYSTEM SYNC FILE CACHE
SYSTEM SYNC FILESYSTEM CACHE
SYSTEM SYNC REPLICA
SYSTEM SYNC TRANSACTION LOG
SYSTEM THREAD FUZZER
SYSTEM TTL MERGES
SYSTEM UNFREEZE
SYSTEM UNLOAD PRIMARY KEY
SYSTEM VIRTUAL PARTS UPDATE
SYSTEM WAIT LOADING PARTS
TABLE ENGINE
TRUNCATE
UNDROP TABLE
이 계층이 어떻게 처리되는지에 대한 예시:
ALTERprivilege는 다른 모든ALTER*privilege를 포함합니다.ALTER CONSTRAINT는ALTER ADD CONSTRAINT,ALTER DROP CONSTRAINT,ALTER MODIFY CONSTRAINTprivilege를 포함합니다.
Privilege는 다른 수준에서 적용됩니다. 수준을 알면 privilege에 사용 가능한 구문을 알 수 있습니다.
Levels (낮은 것부터 높은 것까지):
COLUMN— Privilege는 컬럼, 테이블, 데이터베이스 또는 전역적으로 부여될 수 있습니다.TABLE— Privilege는 테이블, 데이터베이스 또는 전역적으로 부여될 수 있습니다.VIEW— Privilege는 뷰, 데이터베이스 또는 전역적으로 부여될 수 있습니다.DICTIONARY— Privilege는 딕셔너리, 데이터베이스 또는 전역적으로 부여될 수 있습니다.DATABASE— Privilege는 데이터베이스 또는 전역적으로 부여될 수 있습니다.GLOBAL— Privilege는 전역적으로만 부여될 수 있습니다.GROUP— 서로 다른 수준의 privilege를 그룹화합니다.GROUP수준 privilege가 부여되면, 그 그룹에서 사용된 구문에 해당하는 privilege만 부여됩니다.
허용되는 구문의 예시:
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
특수 privilege ALL은 사용자 계정이나 역할에 모든 권한을 부여합니다.
기본적으로 사용자 계정이나 역할은 권한이 없습니다.
사용자나 역할에 권한이 없으면 NONE privilege로 표시됩니다.
일부 쿼리는 그 구현상 권한 집합이 필요합니다. 예를 들어 RENAME 쿼리를 실행하려면 다음 권한이 필요합니다: SELECT, CREATE TABLE, INSERT, DROP TABLE.
SELECT
SELECT 쿼리 실행을 허용합니다.
Privilege level: COLUMN.
Description
이 privilege가 부여된 사용자는 지정된 테이블과 데이터베이스의 지정된 컬럼 목록에 대해 SELECT 쿼리를 실행할 수 있습니다. 사용자가 지정된 것 외의 다른 컬럼을 포함하면 쿼리는 데이터를 반환하지 않습니다.
다음 privilege를 고려해 보세요:
GRANT SELECT(x,y) ON db.table TO john
이 privilege는 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 쿼리 실행을 허용합니다.
Privilege level: COLUMN.
Description
이 privilege가 부여된 사용자는 지정된 테이블과 데이터베이스의 지정된 컬럼 목록에 대해 INSERT 쿼리를 실행할 수 있습니다. 사용자가 지정된 것 외의 다른 컬럼을 포함하면 쿼리는 데이터를 삽입하지 않습니다.
Example
GRANT INSERT(x,y) ON db.table TO john
부여된 privilege는 john이 db.table의 x 및/또는 y 컬럼에 데이터를 삽입할 수 있게 합니다.
ALTER
다음 권한 계층에 따라 ALTER 쿼리 실행을 허용합니다:
ALTER. Level:COLUMN.
ALTER TABLE. Level: GROUP
ALTER UPDATE. Level: COLUMN. Aliases: UPDATE
ALTER DELETE. Level: COLUMN. Aliases: DELETE
ALTER COLUMN. Level: GROUP
ALTER ADD COLUMN. Level: COLUMN. Aliases: ADD COLUMN
ALTER DROP COLUMN. Level: COLUMN. Aliases: DROP COLUMN
ALTER MODIFY COLUMN. Level: COLUMN. Aliases: MODIFY COLUMN
ALTER COMMENT COLUMN. Level: COLUMN. Aliases: COMMENT COLUMN
ALTER CLEAR COLUMN. Level: COLUMN. Aliases: CLEAR COLUMN
ALTER RENAME COLUMN. Level: COLUMN. Aliases: RENAME COLUMN
ALTER INDEX. Level: GROUP. Aliases: INDEX
ALTER ORDER BY. Level: TABLE. Aliases: ALTER MODIFY ORDER BY, MODIFY ORDER BY
ALTER SAMPLE BY. Level: TABLE. Aliases: ALTER MODIFY SAMPLE BY, MODIFY SAMPLE BY
ALTER ADD INDEX. Level: TABLE. Aliases: ADD INDEX
ALTER DROP INDEX. Level: TABLE. Aliases: DROP INDEX
ALTER MATERIALIZE INDEX. Level: TABLE. Aliases: MATERIALIZE INDEX
ALTER CLEAR INDEX. Level: TABLE. Aliases: CLEAR INDEX
ALTER CONSTRAINT. Level: GROUP. Aliases: CONSTRAINT
ALTER ADD CONSTRAINT. Level: TABLE. Aliases: ADD CONSTRAINT
ALTER DROP CONSTRAINT. Level: TABLE. Aliases: DROP CONSTRAINT
ALTER MODIFY CONSTRAINT. Level: TABLE. Aliases: MODIFY CONSTRAINT
ALTER TTL. Level: TABLE. Aliases: ALTER MODIFY TTL, MODIFY TTL
ALTER MATERIALIZE TTL. Level: TABLE. Aliases: MATERIALIZE TTL
ALTER SETTINGS. Level: TABLE. Aliases: ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING
ALTER MOVE PARTITION. Level: TABLE. Aliases: ALTER MOVE PART, MOVE PARTITION, MOVE PART
ALTER FETCH PARTITION. Level: TABLE. Aliases: ALTER FETCH PART, FETCH PARTITION, FETCH PART
ALTER FREEZE PARTITION. Level: TABLE. Aliases: FREEZE PARTITION
ALTER EXECUTE. Level: TABLE. Aliases: ALTER TABLE EXECUTE
ALTER VIEW. Level: GROUP
ALTER VIEW REFRESH. Level: VIEW. Aliases: REFRESH VIEW
ALTER VIEW MODIFY QUERY. Level: VIEW. Aliases: ALTER TABLE MODIFY QUERY
ALTER VIEW MODIFY SQL SECURITY. Level: VIEW. Aliases: ALTER TABLE MODIFY SQL SECURITY
이 계층이 어떻게 처리되는지에 대한 예시:
ALTERprivilege는 다른 모든ALTER*privilege를 포함합니다.ALTER CONSTRAINT는ALTER ADD CONSTRAINT,ALTER DROP CONSTRAINT,ALTER MODIFY CONSTRAINTprivilege를 포함합니다.
Notes
MODIFY SETTINGprivilege는 테이블 엔진 설정을 수정할 수 있게 합니다. 설정이나 서버 구성 매개변수에는 영향을 주지 않습니다.ATTACH연산은 CREATE privilege가 필요합니다.DETACH연산은 DROP privilege가 필요합니다.- KILL MUTATION 쿼리로 mutation을 중지하려면, 그 mutation을 시작할 권한이 있어야 합니다. 예를 들어
ALTER UPDATE쿼리를 중지하려면ALTER UPDATE,ALTER TABLE또는ALTERprivilege가 필요합니다.
BACKUP
쿼리에서 [BACKUP] 실행을 허용합니다. 백업에 대한 자세한 내용은 "Backup and Restore"를 참고하세요.
CREATE
다음 권한 계층에 따라 CREATE 및 ATTACH DDL 쿼리 실행을 허용합니다:
CREATE. Level:GROUP
CREATE DATABASE. Level: DATABASE
CREATE TABLE. Level: TABLE
CREATE ARBITRARY TEMPORARY TABLE. Level: GLOBAL
CREATE TEMPORARY TABLE. Level: GLOBAL
CREATE VIEW. Level: VIEW
CREATE DICTIONARY. Level: DICTIONARY
Notes
- 생성된 테이블을 삭제하려면 사용자에게 DROP이 필요합니다.
CLUSTER
ON CLUSTER 쿼리 실행을 허용합니다.
GRANT CLUSTER ON *.* TO <username>
기본적으로 ON CLUSTER가 있는 쿼리는 사용자가 CLUSTER grant를 가져야 합니다.
CLUSTER privilege를 먼저 부여하지 않고 쿼리에서 ON CLUSTER를 사용하려고 하면 다음 오류가 발생합니다:
Not enough privileges. To execute this query, it's necessary to have the grant CLUSTER ON *.*.
기본 동작은 config.xml의 access_control_improvements 섹션에 있는 on_cluster_queries_require_cluster_grant 설정(아래 참조)을 false로 설정해 변경할 수 있습니다.
<access_control_improvements>
<on_cluster_queries_require_cluster_grant>true</on_cluster_queries_require_cluster_grant>
</access_control_improvements>
DROP
다음 권한 계층에 따라 DROP 및 DETACH 쿼리 실행을 허용합니다:
DROP. Level:GROUP
DROP DATABASE. Level: DATABASE
DROP TABLE. Level: TABLE
DROP VIEW. Level: VIEW
DROP DICTIONARY. Level: DICTIONARY
TRUNCATE
TRUNCATE 쿼리 실행을 허용합니다.
Privilege level: TABLE.
OPTIMIZE
OPTIMIZE TABLE 쿼리 실행을 허용합니다.
Privilege level: TABLE.
SHOW
다음 권한 계층에 따라 SHOW, DESCRIBE, USE, EXISTS 쿼리 실행을 허용합니다:
SHOW. Level:GROUP
SHOW DATABASES. Level: DATABASE. SHOW DATABASES, SHOW CREATE DATABASE, USE <database> 쿼리를 실행할 수 있게 합니다.
SHOW TABLES. Level: TABLE. SHOW TABLES, EXISTS <table>, CHECK <table> 쿼리를 실행할 수 있게 합니다.
SHOW COLUMNS. Level: COLUMN. SHOW CREATE TABLE, DESCRIBE 쿼리를 실행할 수 있게 합니다.
SHOW DICTIONARIES. Level: DICTIONARY. SHOW DICTIONARIES, SHOW CREATE DICTIONARY, EXISTS <dictionary> 쿼리를 실행할 수 있게 합니다.
Notes
사용자가 지정된 테이블, 딕셔너리 또는 데이터베이스에 관한 다른 privilege를 가지면 SHOW privilege가 있습니다.
KILL QUERY
다음 권한 계층에 따라 KILL 쿼리 실행을 허용합니다:
Privilege level: GLOBAL.
Notes
KILL QUERY privilege는 한 사용자가 다른 사용자의 쿼리를 종료할 수 있게 합니다.
ACCESS MANAGEMENT
사용자가 사용자, 역할, 행 정책을 관리하는 쿼리를 실행할 수 있게 합니다.
ACCESS MANAGEMENT. Level:GROUP
CREATE USER. Level: GLOBAL
ALTER USER. Level: GLOBAL
DROP USER. Level: GLOBAL
CREATE TOKEN. Level: GLOBAL
CREATE ROLE. Level: GLOBAL
ALTER ROLE. Level: GLOBAL
DROP ROLE. Level: GLOBAL
ROLE ADMIN. Level: GLOBAL
CREATE ROW POLICY. Level: GLOBAL. Aliases: CREATE POLICY
ALTER ROW POLICY. Level: GLOBAL. Aliases: ALTER POLICY
DROP ROW POLICY. Level: GLOBAL. Aliases: DROP POLICY
CREATE QUOTA. Level: GLOBAL
ALTER QUOTA. Level: GLOBAL
DROP QUOTA. Level: GLOBAL
CREATE SETTINGS PROFILE. Level: GLOBAL. Aliases: CREATE PROFILE
ALTER SETTINGS PROFILE. Level: GLOBAL. Aliases: ALTER PROFILE
DROP SETTINGS PROFILE. Level: GLOBAL. Aliases: DROP PROFILE
SHOW ACCESS. Level: GROUP
SHOW_USERS. Level: GLOBAL. Aliases: SHOW CREATE USER
SHOW_ROLES. Level: GLOBAL. Aliases: SHOW CREATE ROLE
SHOW_ROW_POLICIES. Level: GLOBAL. Aliases: SHOW POLICIES, SHOW CREATE ROW POLICY, SHOW CREATE POLICY
SHOW_QUOTAS. Level: GLOBAL. Aliases: SHOW CREATE QUOTA
SHOW_SETTINGS_PROFILES. Level: GLOBAL. Aliases: SHOW PROFILES, SHOW CREATE SETTINGS PROFILE, SHOW CREATE PROFILE
ALLOW SQL SECURITY NONE. Level: GLOBAL. Aliases: CREATE SQL SECURITY NONE, SQL SECURITY NONE, SECURITY NONE
ROLE ADMIN privilege는 사용자가 admin option으로 자신에게 할당되지 않은 역할을 포함해 어떤 역할이든 할당하고 회수할 수 있게 합니다.
CREATE TOKEN privilege는 사용자가 다른 방식으로 계정을 관리할 수 없으면서도, CREATE TOKEN 또는 동등한 ALTER USER <current user> ADD IDENTIFIED ... 문으로 자신의 계정에 인증 방법을 추가할 수 있게 합니다. 이는 ALTER USER와 분리되어 있는데, 사용자가 자신 계정의 보안 수준을 낮추게 할 수 있기 때문입니다, 예를 들어 그렇지 않으면 인증서로만 접근할 수 있는 계정에 장기 비밀번호를 추가하는 경우.
SYSTEM
다음 권한 계층에 따라 사용자가 SYSTEM 쿼리를 실행할 수 있게 합니다.
SYSTEM. Level:GROUP
SYSTEM SHUTDOWN. Level: GLOBAL. Aliases: SYSTEM KILL, SHUTDOWN
SYSTEM DROP CACHE. Aliases: DROP CACHE
SYSTEM DROP DNS CACHE. Level: GLOBAL. Aliases: SYSTEM CLEAR DNS CACHE, SYSTEM DROP DNS, DROP DNS CACHE, DROP DNS
SYSTEM DROP MARK CACHE. Level: GLOBAL. Aliases: SYSTEM CLEAR MARK CACHE, SYSTEM DROP MARK, DROP MARK CACHE, DROP MARKS
SYSTEM DROP UNCOMPRESSED CACHE. Level: GLOBAL. Aliases: SYSTEM CLEAR UNCOMPRESSED CACHE, SYSTEM DROP UNCOMPRESSED, DROP UNCOMPRESSED CACHE, DROP UNCOMPRESSED
SYSTEM RELOAD. Level: GROUP
SYSTEM RELOAD CONFIG. Level: GLOBAL. Aliases: RELOAD CONFIG
SYSTEM RELOAD DICTIONARY. Level: GLOBAL. Aliases: SYSTEM RELOAD DICTIONARIES, RELOAD DICTIONARY, RELOAD DICTIONARIES, SYSTEM UNLOAD DICTIONARY, SYSTEM UNLOAD DICTIONARIES, UNLOAD DICTIONARY, UNLOAD DICTIONARIES
SYSTEM RELOAD EMBEDDED DICTIONARIES. Level: GLOBAL. Aliases: RELOAD EMBEDDED DICTIONARIES
SYSTEM MERGES. Level: TABLE. Aliases: SYSTEM STOP MERGES, SYSTEM START MERGES, STOP MERGES, START MERGES
SYSTEM TTL MERGES. Level: TABLE. Aliases: SYSTEM STOP TTL MERGES, SYSTEM START TTL MERGES, STOP TTL MERGES, START TTL MERGES
SYSTEM FETCHES. Level: TABLE. Aliases: SYSTEM STOP FETCHES, SYSTEM START FETCHES, STOP FETCHES, START FETCHES
SYSTEM MOVES. Level: TABLE. Aliases: SYSTEM STOP MOVES, SYSTEM START MOVES, STOP MOVES, START MOVES
SYSTEM SENDS. Level: GROUP. Aliases: SYSTEM STOP SENDS, SYSTEM START SENDS, STOP SENDS, START SENDS
SYSTEM DISTRIBUTED SENDS. Level: TABLE. Aliases: SYSTEM STOP DISTRIBUTED SENDS, SYSTEM START DISTRIBUTED SENDS, STOP DISTRIBUTED SENDS, START DISTRIBUTED SENDS
SYSTEM REPLICATED SENDS. Level: TABLE. Aliases: SYSTEM STOP REPLICATED SENDS, SYSTEM START REPLICATED SENDS, STOP REPLICATED SENDS, START REPLICATED SENDS
SYSTEM REPLICATION QUEUES. Level: TABLE. Aliases: SYSTEM STOP REPLICATION QUEUES, SYSTEM START REPLICATION QUEUES, STOP REPLICATION QUEUES, START REPLICATION QUEUES
SYSTEM SYNC REPLICA. Level: TABLE. Aliases: SYNC REPLICA
SYSTEM RESTART REPLICA. Level: TABLE. Aliases: RESTART REPLICA
SYSTEM BACKGROUND. Level: GROUP
SYSTEM STREAMING ENGINES. Level: TABLE
SYSTEM VIEWS. Level: VIEW. Aliases: SYSTEM REFRESH VIEW, SYSTEM START VIEWS, SYSTEM STOP VIEWS, SYSTEM START VIEW, SYSTEM STOP VIEW, SYSTEM PAUSE VIEWS, SYSTEM PAUSE VIEW, SYSTEM CANCEL VIEW, REFRESH VIEW, START VIEWS, STOP VIEWS, START VIEW, STOP VIEW, PAUSE VIEWS, PAUSE VIEW, CANCEL VIEW
SYSTEM FLUSH. Level: GROUP
SYSTEM FLUSH DISTRIBUTED. Level: TABLE. Aliases: FLUSH DISTRIBUTED
SYSTEM FLUSH LOGS. Level: GLOBAL. Aliases: FLUSH LOGS
SYSTEM UNLOAD DICTIONARY와 SYSTEM UNLOAD DICTIONARIES 명령은 SYSTEM RELOAD DICTIONARY privilege를 재사용하므로, SYSTEM RELOAD DICTIONARY를 가진 사용자는 딕셔너리를 unload할 수도 있습니다.
SYSTEM RELOAD EMBEDDED DICTIONARIES privilege는 SYSTEM RELOAD DICTIONARY ON *.* privilege에 의해 암시적으로 부여됩니다.
INTROSPECTION
introspection 함수 사용을 허용합니다.
INTROSPECTION. Level:GROUP. Aliases:INTROSPECTION FUNCTIONS
addressToLine. Level: GLOBAL
addressToLineWithInlines. Level: GLOBAL
addressToSymbol. Level: GLOBAL
demangle. Level: GLOBAL
SOURCES
외부 데이터 소스 사용을 허용합니다. 소스 기반 database engines, table engines, table functions에 적용됩니다.
또한 백업 위치에 필요합니다: BACKUP/RESTORE와 ENGINE = Backup은 이러한 grant에 대해 위치를 승인합니다.
READ. Level:GLOBAL_WITH_PARAMETERWRITE. Level:GLOBAL_WITH_PARAMETER
가능한 매개변수:
AZUREBIGQUERYDISKFILEHDFSHIVEJDBCKAFKAMONGOMYSQLNATSODBCPOSTGRESRABBITMQREDISREMOTES3SQLITEURL
소스에 대한 READ/WRITE grant 분리는 버전 25.7부터, 서버 설정
access_control_improvements.enable_read_write_grants와 함께 사용할 수 있습니다.
그렇지 않으면, 새 GRANT READ, WRITE ON AZURE TO user와 동등한 GRANT AZURE ON *.* TO user 구문을 사용해야 합니다.
Examples:
- MySQL table engine으로 테이블을 만들려면
CREATE TABLE (ON db.table_name)과MYSQLprivilege가 필요합니다. - mysql table function을 사용하려면
CREATE TEMPORARY TABLE과MYSQLprivilege가 필요합니다.
Source Filter Grants
이 기능은 버전 25.8부터, 서버 설정
access_control_improvements.enable_read_write_grants와 함께 사용할 수 있습니다.
정규식 필터를 사용해 특정 소스 URI에 대한 접근을 부여할 수 있습니다. 이는 사용자가 접근할 수 있는 외부 데이터 소스를 세밀하게 제어할 수 있게 해줍니다.
Syntax:
GRANT READ ON S3('regexp_pattern') TO user
이 grant는 사용자가 지정된 정규식 패턴과 일치하는 S3 URI에서만 읽을 수 있게 합니다.
Examples:
특정 S3 버킷 경로에 대한 접근 부여:
-- Allow user to read only from s3://foo/ paths
GRANT READ ON S3('s3://foo/.*') TO john
-- Allow user to read from specific file patterns
GRANT READ ON S3('s3://mybucket/data/2024/.*\.parquet') TO analyst
-- Multiple filters can be granted to the same user
GRANT READ ON S3('s3://foo/.*') TO john
GRANT READ ON S3('s3://bar/.*') TO john
Source filter는 매개변수로 regexp를 받으므로, grant
GRANT READ ON URL('http://www.google.com') TO john;
는 다음 쿼리를 허용합니다:
SELECT * FROM url('https://www.google.com');
SELECT * FROM url('https://www-google.com');
그 이유는 .이 regexp에서 Any Single Character로 취급되기 때문입니다.
이는 잠재적인 취약점으로 이어질 수 있습니다. 올바른 grant는 다음과 같아야 합니다:
GRANT READ ON URL('https://www\.google\.com') TO john;
GRANT OPTION으로 재부여(Re-granting with GRANT OPTION):
원래 grant에 WITH GRANT OPTION이 있으면 GRANT CURRENT GRANTS를 사용해 재부여할 수 있습니다:
-- Original grant with GRANT OPTION
GRANT READ ON S3('s3://foo/.*') TO john WITH GRANT OPTION
-- John can now regrant this access to others
GRANT CURRENT GRANTS(READ ON S3) TO alice
중요한 제한 사항:
- 부분 회수는 허용되지 않습니다: 부여된 필터 패턴의 하위 집합을 회수할 수 없습니다. 전체 grant를 회수하고 필요하면 새 패턴으로 재부여해야 합니다.
- 와일드카드 grant는 허용되지 않습니다:
GRANT READ ON *('regexp')같은 와일드카드 전용 패턴은 사용할 수 없습니다. 특정 소스를 제공해야 합니다.
dictGet
dictGet. Aliases:dictHas,dictGetHierarchy,dictGetRoot,dictGetChildren,dictGetDescendants,dictIsIn
사용자가 dictGet, dictHas, dictGetHierarchy, dictGetRoot, dictGetChildren, dictGetDescendants, dictIsIn 함수를 실행할 수 있게 합니다.
Privilege level: DICTIONARY.
Examples
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 쿼리에서 비밀을 볼 수 있게 합니다.
NAMED COLLECTION ADMIN
지정된 named collection에 특정 연산을 허용합니다. 23.7 버전 이전에는 NAMED COLLECTION CONTROL이라고 불렸으며, 23.7 이후 NAMED COLLECTION ADMIN이 추가되고 NAMED COLLECTION CONTROL은 별칭으로 보존되었습니다.
NAMED COLLECTION ADMIN. Level:NAMED_COLLECTION. Aliases:NAMED COLLECTION CONTROL
CREATE NAMED COLLECTION. Level: NAMED_COLLECTION
DROP NAMED COLLECTION. Level: NAMED_COLLECTION
ALTER NAMED COLLECTION. Level: NAMED_COLLECTION
SHOW NAMED COLLECTIONS. Level: NAMED_COLLECTION. Aliases: SHOW NAMED COLLECTIONS
SHOW NAMED COLLECTIONS SECRETS. Level: NAMED_COLLECTION. Aliases: SHOW NAMED COLLECTIONS SECRETS
NAMED COLLECTION. Level: NAMED_COLLECTION. Aliases: NAMED COLLECTION USAGE, USE NAMED COLLECTION
다른 모든 grant(CREATE, DROP, ALTER, SHOW)와 달리 NAMED COLLECTION grant는 23.7에만 추가되었고, 다른 것들은 모두 더 일찍(22.12) 추가되었습니다.
Examples
named collection이 abc라고 가정하고, 사용자 john에게 privilege CREATE NAMED COLLECTION을 부여합니다.
GRANT CREATE NAMED COLLECTION ON abc TO john
TABLE ENGINE
테이블을 만들 때 지정된 테이블 엔진 사용을 허용합니다. table engines에 적용됩니다.
Examples
GRANT TABLE ENGINE ON * TO johnGRANT TABLE ENGINE ON TinyLog TO john
기본적으로 역호환성 이유로 특정 테이블 엔진으로 테이블을 만드는 것은 grant를 무시하지만,
config.xml에서 table_engines_require_grant를 true로 설정해 이 동작을 변경할 수 있습니다.
외부 소스가 있는 일부 테이블 엔진은 해당 소스에 대한 READ/WRITE 권한이 필요할 수 있습니다. Sources 참고.
예를 들어 AzureBlobStorage 테이블 엔진의 경우 다음 grant가 필요할 수 있습니다.
GRANT READ, WRITE ON AZURE TO john
ALL
규제 대상 엔터티에 대한 모든 권한을 사용자 계정이나 역할에 부여합니다.
ALL privilege는 ClickHouse Cloud에서 지원되지 않으며, default 사용자는 제한된 권한을 갖습니다. 사용자는 default_role을 부여함으로써 사용자에게 최대 권한을 부여할 수 있습니다. 자세한 내용은 여기를 참고하세요.
사용자는 기본 사용자로 GRANT CURRENT GRANTS를 사용해 ALL과 유사한 효과를 얻을 수도 있습니다.
NONE
어떤 권한도 부여하지 않습니다.
ADMIN OPTION
ADMIN OPTION privilege는 사용자가 자신의 역할을 다른 사용자에게 부여할 수 있게 합니다.