> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> GRANTステートメントに関するドキュメント

# GRANTステートメント

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            ClickHouse Cloud では利用できません
        </div>;
};

* [権限](#privileges)を ClickHouse のユーザーアカウントまたはロールに付与します。
* ロールをユーザーアカウントまたは他のロールに割り当てます。

権限を取り消すには、[REVOKE](/ja/reference/statements/revoke)ステートメントを使用します。付与されている権限は、[SHOW GRANTS](/ja/reference/statements/show#show-grants)ステートメントで確認できます。

<div id="granting-privilege-syntax">
  ## 権限付与の構文
</div>

```sql theme={null}
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` に対する既存の権限を新しい権限で置き換えます。これが指定されていない場合は、権限が追加されます。

<div id="assigning-role-syntax">
  ## ロールの割り当て構文
</div>

```sql theme={null}
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](#admin-option) 権限を付与します。
`WITH REPLACE OPTION` 句は、`user` または `role` の既存のロールを新しいロールで置き換えます。指定しない場合は、ロールが追加されます。

<div id="grant-current-grants-syntax">
  ## Grant Current Grants の構文
</div>

```sql theme={null}
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` で利用可能なすべての権限が付与されます。

<div id="usage">
  ## 使用方法
</div>

`GRANT` を使用するには、アカウントに `GRANT OPTION` 権限が必要です。権限を付与できるのは、自身のアカウントに与えられている権限の範囲内に限られます。

たとえば、管理者は次のクエリで `john` アカウントに権限を付与しています。

```sql theme={null}
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` データベースへのアクセスは常に許可されます (このデータベースはクエリの処理に使用されるためです) 。

<Note>
  新規ユーザーがデフォルトでアクセスできるシステムテーブルは多数ありますが、権限が付与されていない場合、すべてのシステムテーブルにデフォルトでアクセスできるわけではありません。
  さらに、`system.zookeeper` など一部のシステムテーブルへのアクセスは、セキュリティ上の理由により Cloud ユーザーには制限されています。
</Note>

1 つのクエリで、複数のアカウントに複数の権限を付与できます。クエリ `GRANT SELECT, INSERT ON *.* TO john, robin` を使用すると、アカウント `john` と `robin` は、サーバー上のすべてのデータベース内のすべてのテーブルに対して `INSERT` クエリと `SELECT` クエリを実行できます。

<div id="wildcard-grants">
  ## ワイルドカードを使った権限付与
</div>

権限を指定する際は、テーブル名やデータベース名の代わりにアスタリスク (`*`) を使用できます。たとえば、`GRANT SELECT ON db.* TO john` クエリでは、`john` に `db` データベース内のすべてのテーブルに対する `SELECT` クエリの実行を許可します。
また、データベース名を省略することもできます。この場合、権限は現在のデータベースに対して付与されます。
たとえば、`GRANT SELECT ON * TO john` は現在のデータベース内のすべてのテーブルに対する権限を付与し、`GRANT SELECT ON mytable TO john` は現在のデータベース内の `mytable` テーブルに対する権限を付与します。

<Note>
  以下で説明する機能は、ClickHouse バージョン 24.10 以降で利用できます。
</Note>

テーブル名またはデータベース名の末尾にアスタリスクを付けることもできます。この機能を使うと、テーブルのパスのプレフィックスを指定して権限を付与できます。
例: `GRANT SELECT ON db.my_tables* TO john`。このクエリでは、`john` に `db` データベース内で `my_tables` をプレフィックスに持つすべてのテーブルに対する `SELECT` クエリの実行を許可します。

さらに例を示します。

`GRANT SELECT ON db.my_tables* TO john`

```sql theme={null}
SELECT * FROM db.my_tables -- 許可済み
SELECT * FROM db.my_tables_0 -- 許可済み
SELECT * FROM db.my_tables_1 -- 許可済み

SELECT * FROM db.other_table -- 未許可
SELECT * FROM db2.my_tables -- 未許可
```

`GRANT SELECT ON db*.* TO john`

```sql theme={null}
SELECT * FROM db.my_tables -- 許可済み
SELECT * FROM db.my_tables_0 -- 許可済み
SELECT * FROM db.my_tables_1 -- 許可済み
SELECT * FROM db.other_table -- 許可済み
SELECT * FROM db2.my_tables -- 許可済み
```

付与されたパス内で新たに作成されたすべてのテーブルは、自動的に親からすべての権限を継承します。
たとえば、`GRANT SELECT ON db.* TO john` クエリを実行した後に新しいテーブル `db.new_table` を作成すると、ユーザー `john` は `SELECT * FROM db.new_table` クエリを実行できます。

アスタリスクを指定できるのは、**プレフィックスに対してのみ**です。

```sql theme={null}
GRANT SELECT ON db.* TO john -- 正しい
GRANT SELECT ON db*.* TO john -- 正しい

GRANT SELECT ON *.my_table TO john -- 誤り
GRANT SELECT ON foo*bar TO john -- 誤り
GRANT SELECT ON *suffix TO john -- 誤り
GRANT SELECT(foo) ON db.table* TO john -- 誤り
```

<div id="privileges">
  ## 権限
</div>

権限とは、ユーザーに対して特定の種類のクエリの実行を許可するものです。

権限には階層構造があり、実行できるクエリの範囲は権限のスコープによって決まります。

ClickHouse における権限の階層は以下のとおりです。

* [`ALL`](#all)
  * [`アクセス管理`](#access-management)
    * `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 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`](#alter)
    * `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 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`
  * [`BACKUP`](#backup)
  * [`CLUSTER`](#cluster)
  * [`CREATE`](#create)
    * `CREATE ARBITRARY TEMPORARY TABLE`
      * `CREATE TEMPORARY TABLE`
    * `CREATE DATABASE`
    * `CREATE DICTIONARY`
    * `CREATE FUNCTION`
    * `CREATE RESOURCE`
    * `CREATE TABLE`
    * `CREATE VIEW`
    * `CREATE WORKLOAD`
  * [`dictGet`](#dictget)
  * [`displaySecretsInShowAndSelect`](#displaysecretsinshowandselect)
  * [`DROP`](#drop)
    * `DROP DATABASE`
    * `DROP DICTIONARY`
    * `DROP FUNCTION`
    * `DROP RESOURCE`
    * `DROP TABLE`
    * `DROP VIEW`
    * `DROP WORKLOAD`
  * [`INSERT`](#insert)
  * [`INTROSPECTION`](#introspection)
    * `addressToLine`
    * `addressToLineWithInlines`
    * `addressToSymbol`
    * `demangle`
  * `KILL QUERY`
  * `KILL TRANSACTION`
  * `MOVE PARTITION BETWEEN SHARDS`
  * [`NAMED COLLECTION ADMIN`](#named-collection-admin)
    * `ALTER NAMED COLLECTION`
    * `CREATE NAMED COLLECTION`
    * `DROP NAMED COLLECTION`
    * `NAMED COLLECTION`
    * `SHOW NAMED COLLECTIONS`
    * `SHOW NAMED COLLECTIONS SECRETS`
  * [`OPTIMIZE`](#optimize)
  * [`SELECT`](#select)
  * [`SET DEFINER`](/ja/reference/statements/create/view#sql_security)
  * [`SHOW`](#show)
    * `SHOW COLUMNS`
    * `SHOW DATABASES`
    * `SHOW DICTIONARIES`
    * `SHOW TABLES`
  * `SHOW FILESYSTEM CACHES`
  * [`SOURCES`](#sources)
    * `AZURE`
    * `FILE`
    * `HDFS`
    * `HIVE`
    * `JDBC`
    * `KAFKA`
    * `MONGO`
    * `MYSQL`
    * `NATS`
    * `ODBC`
    * `POSTGRES`
    * `RABBITMQ`
    * `REDIS`
    * `REMOTE`
    * `S3`
    * `SQLITE`
    * `URL`
  * [`SYSTEM`](#system)
    * `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 PRIMARY INDEX CACHE`
    * `SYSTEM DROP REPLICA`
    * `SYSTEM FAILPOINT`
    * `SYSTEM FETCHES`
    * `SYSTEM FLUSH`
      * `SYSTEM FLUSH ASYNC INSERT QUEUE`
      * `SYSTEM FLUSH LOGS`
    * `SYSTEM JEMALLOC`
    * `SYSTEM KILL QUERY`
    * `SYSTEM KILL TRANSACTION`
    * `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 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 MODEL`
        * `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 VIEWS`
    * `SYSTEM VIRTUAL PARTS UPDATE`
    * `SYSTEM WAIT LOADING PARTS`
  * [`テーブルエンジン`](#table-engine)
  * [`TRUNCATE`](#truncate)
  * `UNDROP TABLE`
* [`NONE`](#none)

この階層がどのように扱われるかの例:

* `ALTER` 権限には、ほかのすべての `ALTER*` 権限が含まれます。
* `ALTER CONSTRAINT` には、`ALTER ADD CONSTRAINT` 権限と `ALTER DROP CONSTRAINT` 権限が含まれます。

権限は異なるレベルで適用されます。レベルがわかると、その権限に対して使用できる構文もわかります。

レベル (低いものから高いものの順) :

* `COLUMN` — 権限はカラム、テーブル、データベース、またはグローバルに対して付与できます。
* `TABLE` — 権限はテーブル、データベース、またはグローバルに対して付与できます。
* `VIEW` — 権限はビュー、データベース、またはグローバルに対して付与できます。
* `DICTIONARY` — 権限は Dictionary、データベース、またはグローバルに対して付与できます。
* `DATABASE` — 権限はデータベースまたはグローバルに対して付与できます。
* `GLOBAL` — 権限はグローバルに対してのみ付与できます。
* `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](#all) は、ユーザーアカウントまたはロールにすべての権限を付与します。

デフォルトでは、ユーザーアカウントまたはロールには権限がありません。

ユーザーまたはロールに権限がない場合は、[NONE](#none) 権限として表示されます。

一部のクエリは、その実装上、一連の権限を必要とします。たとえば、[RENAME](/ja/reference/statements/optimize) クエリを実行するには、次の権限が必要です: `SELECT`、`CREATE TABLE`、`INSERT`、`DROP TABLE`。

<div id="select">
  ### SELECT
</div>

[SELECT](/ja/reference/statements/select/index) クエリの実行を許可します。

権限レベル: `COLUMN`。

**説明**

この権限が付与されたユーザーは、指定したデータベースおよびテーブルにおいて、指定したカラムの一覧に対する `SELECT` クエリを実行できます。指定されたもの以外のカラムをユーザーが含めた場合、そのクエリはデータを返しません。

次の権限について考えてみましょう。

```sql theme={null}
GRANT SELECT(x,y) ON db.table TO john
```

この権限により、`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 がすべてのデータを返します。

<div id="insert">
  ### INSERT
</div>

[INSERT](/ja/reference/statements/insert-into) クエリの実行を許可します。

権限レベル: `COLUMN`。

**説明**

この権限を付与されたユーザーは、指定したデータベース内の指定したテーブルに対して、指定されたカラムの一覧に対する `INSERT` クエリを実行できます。ユーザーが指定されたもの以外のカラムを含めた場合、そのクエリではデータは挿入されません。

**例**

```sql theme={null}
GRANT INSERT(x,y) ON db.table TO john
```

付与された権限により、`john` は `db.table` の `x` および/または `y` カラムにデータを挿入できます。

<div id="alter">
  ### ALTER
</div>

次の権限階層に従って、[ALTER](/ja/reference/statements/alter/index)クエリの実行を許可します。

* `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 SAMPLE BY`。レベル: `TABLE`。別名: `ALTER MODIFY SAMPLE BY`, `MODIFY SAMPLE 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`。別名: `ALTER FETCH PART`, `FETCH PARTITION`, `FETCH PART`
  * `ALTER FREEZE PARTITION`。レベル: `TABLE`。別名: `FREEZE PARTITION`
  * `ALTER EXECUTE`。レベル: `TABLE`。別名: `ALTER TABLE EXECUTE`
  * `ALTER VIEW`。レベル: `GROUP`
  * `ALTER VIEW REFRESH`。レベル: `VIEW`。別名: `REFRESH VIEW`
  * `ALTER VIEW MODIFY QUERY`。レベル: `VIEW`。別名: `ALTER TABLE MODIFY QUERY`
  * `ALTER VIEW MODIFY SQL SECURITY`。レベル: `VIEW`。別名: `ALTER TABLE MODIFY SQL SECURITY`

この階層の扱い方の例:

* `ALTER` 権限には、他のすべての `ALTER*` 権限が含まれます。
* `ALTER CONSTRAINT` には、`ALTER ADD CONSTRAINT` と `ALTER DROP CONSTRAINT` の権限が含まれます。

**注記**

* `MODIFY SETTING` 権限では、テーブルエンジンの設定を変更できます。settings やサーバー設定のパラメータには影響しません。
* `ATTACH` 操作には [CREATE](#create) 権限が必要です。
* `DETACH` 操作には [DROP](#drop) 権限が必要です。
* [KILL MUTATION](/ja/reference/statements/kill#kill-mutation)クエリでミューテーションを停止するには、そのミューテーションを開始できる権限が必要です。たとえば、`ALTER UPDATE` クエリを停止したい場合は、`ALTER UPDATE`、`ALTER TABLE`、または `ALTER` 権限が必要です。

<div id="backup">
  ### BACKUP
</div>

クエリで \[`BACKUP`] を実行できます。バックアップの詳細については、["バックアップと復元"](/ja/concepts/features/backup-restore/overview) をご覧ください。

<div id="create">
  ### CREATE
</div>

次の権限階層に応じて、[CREATE](/ja/reference/statements/create/index) および [ATTACH](/ja/reference/statements/attach) DDLクエリの実行を許可します。

* `CREATE`。レベル: `GROUP`
  * `CREATE DATABASE`。レベル: `DATABASE`
  * `CREATE TABLE`。レベル: `TABLE`
    * `CREATE ARBITRARY TEMPORARY TABLE`。レベル: `GLOBAL`
      * `CREATE TEMPORARY TABLE`。レベル: `GLOBAL`
  * `CREATE VIEW`。レベル: `VIEW`
  * `CREATE DICTIONARY`。レベル: `DICTIONARY`

**注記**

* 作成したテーブルを削除するには、ユーザーに [DROP](#drop) 権限が必要です。

<div id="cluster">
  ### クラスター
</div>

`ON CLUSTER` クエリを実行できます。

```sql title="Syntax" theme={null}
GRANT CLUSTER ON *.* TO <username>
```

デフォルトでは、`ON CLUSTER` を含むクエリを実行するには、ユーザーに `CLUSTER` 権限付与が必要です。
`CLUSTER` 権限付与を事前に行わずにクエリで `ON CLUSTER` を使おうとすると、次のエラーが発生します。

```text theme={null}
権限が不足しています。このクエリを実行するには、CLUSTER ON *.* の権限付与が必要です。 
```

デフォルトの動作は、`config.xml` の `access_control_improvements` セクションにある `on_cluster_queries_require_cluster_grant` 設定 (以下を参照) を `false` に設定することで変更できます。

```yaml title="config.xml" theme={null}
<access_control_improvements>
    <on_cluster_queries_require_cluster_grant>true</on_cluster_queries_require_cluster_grant>
</access_control_improvements>
```

<div id="drop">
  ### DROP
</div>

以下の権限階層に従って、[DROP](/ja/reference/statements/drop) および [DETACH](/ja/reference/statements/detach) クエリを実行できます。

* `DROP`。レベル: `GROUP`
  * `DROP DATABASE`。レベル: `DATABASE`
  * `DROP TABLE`。レベル: `TABLE`
  * `DROP VIEW`。レベル: `VIEW`
  * `DROP DICTIONARY`。レベル: `DICTIONARY`

<div id="truncate">
  ### TRUNCATE
</div>

[TRUNCATE](/ja/reference/statements/truncate) クエリの実行を許可します。

権限レベル: `TABLE`。

<div id="optimize">
  ### OPTIMIZE
</div>

[OPTIMIZE TABLE](/ja/reference/statements/optimize) クエリを実行できます。

権限レベル: `TABLE`。

<div id="show">
  ### SHOW
</div>

次の権限階層に従って、`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>` クエリの実行を許可します。

**注意**

指定したテーブル、Dictionary、またはデータベースに関する他のいずれかの権限を持っているユーザーには、`SHOW` 権限も付与されます。

<div id="kill-query">
  ### KILL QUERY
</div>

次の権限階層に従って、[KILL](/ja/reference/statements/kill#kill-query)クエリを実行できます。

権限レベル: `GLOBAL`。

**注意**

`KILL QUERY` 権限を持つユーザーは、他のユーザーのクエリを強制終了できます。

<div id="access-management">
  ### アクセス管理
</div>

ユーザーが、ユーザー、ロール、行ポリシーを管理するクエリを実行できるようにします。

* `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`
  * `ALLOW SQL SECURITY NONE`. レベル: `GLOBAL`. 別名: `CREATE SQL SECURITY NONE`, `SQL SECURITY NONE`, `SECURITY NONE`

`ROLE ADMIN` 権限があると、admin オプション付きでそのユーザーに付与されていないロールも含め、あらゆるロールを付与したり取り消したりできます。

<div id="system">
  ### SYSTEM
</div>

以下の権限階層に従って、ユーザーは [SYSTEM](/ja/reference/statements/system) クエリを実行できます。

* `SYSTEM`。レベル: `GROUP`
  * `SYSTEM SHUTDOWN`。レベル: `GLOBAL`。別名: `SYSTEM KILL`, `SHUTDOWN`
  * `SYSTEM DROP CACHE`。別名: `DROP CACHE`
    * `SYSTEM DROP DNS CACHE`。レベル: `GLOBAL`。別名: `SYSTEM CLEAR DNS CACHE`, `SYSTEM DROP DNS`, `DROP DNS CACHE`, `DROP DNS`
    * `SYSTEM DROP MARK CACHE`。レベル: `GLOBAL`。別名: `SYSTEM CLEAR MARK CACHE`, `SYSTEM DROP MARK`, `DROP MARK CACHE`, `DROP MARKS`
    * `SYSTEM DROP UNCOMPRESSED CACHE`。レベル: `GLOBAL`。別名: `SYSTEM CLEAR UNCOMPRESSED CACHE`, `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 *.*` 権限により暗黙的に付与されます。

<div id="introspection">
  ### INTROSPECTION
</div>

[イントロスペクション](/ja/concepts/features/performance/troubleshoot/sampling-query-profiler)関数を使用できるようにします。

* `INTROSPECTION`. レベル: `GROUP`. 別名: `INTROSPECTION FUNCTIONS`
  * `addressToLine`. レベル: `GLOBAL`
  * `addressToLineWithInlines`. レベル: `GLOBAL`
  * `addressToSymbol`. レベル: `GLOBAL`
  * `demangle`. レベル: `GLOBAL`

<div id="sources">
  ### SOURCES
</div>

外部データソースの使用を許可します。[テーブルエンジン](/ja/reference/engines/table-engines/index)および[テーブル関数](/ja/reference/functions/table-functions/index)に適用されます。

* `READ`. レベル: `GLOBAL_WITH_PARAMETER`
* `WRITE`. レベル: `GLOBAL_WITH_PARAMETER`

指定可能なパラメーター:

* `AZURE`
* `FILE`
* `HDFS`
* `HIVE`
* `JDBC`
* `KAFKA`
* `MONGO`
* `MYSQL`
* `NATS`
* `ODBC`
* `POSTGRES`
* `RABBITMQ`
* `REDIS`
* `REMOTE`
* `S3`
* `SQLITE`
* `URL`

<Note>
  SOURCES に対する READ/WRITE 権限の分離は、バージョン 25.7 以降で、かつサーバー設定
  `access_control_improvements.enable_read_write_grants`
  が有効な場合にのみ利用できます。

  それ以外の場合は、`GRANT AZURE ON *.* TO user` 構文を使用してください。これは新しい `GRANT READ, WRITE ON AZURE TO user` と同等です。
</Note>

例:

* [MySQL テーブルエンジン](/ja/reference/engines/table-engines/integrations/mysql)でテーブルを作成するには、`CREATE TABLE (ON db.table_name)` と `MYSQL` 権限が必要です。
* [mysql テーブル関数](/ja/reference/functions/table-functions/mysql)を使用するには、`CREATE TEMPORARY TABLE` と `MYSQL` 権限が必要です。

<div id="source-filter-grants">
  ### ソースフィルターの権限付与
</div>

<Note>
  この機能は、バージョン 25.8 以降で、サーバー設定
  `access_control_improvements.enable_read_write_grants`
  が有効な場合にのみ利用できます
</Note>

正規表現フィルターを使うことで、特定のソース URI へのアクセス権を付与できます。これにより、ユーザーがアクセスできる外部データソースをきめ細かく制御できます。

**構文:**

```sql theme={null}
GRANT READ ON S3('regexp_pattern') TO user
```

この権限付与により、ユーザーは指定した正規表現パターンに一致する S3 URI からのみ読み取りできるようになります。

**例:**

特定の S3 バケットパスへのアクセスを許可します:

```sql theme={null}
-- ユーザーが s3://foo/ パスからのみ読み取れるようにする
GRANT READ ON S3('s3://foo/.*') TO john

-- ユーザーが特定のファイルパターンから読み取れるようにする
GRANT READ ON S3('s3://mybucket/data/2024/.*\.parquet') TO analyst

-- 同一ユーザーに複数のフィルターを付与できる
GRANT READ ON S3('s3://foo/.*') TO john
GRANT READ ON S3('s3://bar/.*') TO john
```

<Warning>
  ソースフィルターはパラメータに **regexp** を取るため、権限付与
  `GRANT READ ON URL('http://www.google.com') TO john;`

  によって、次のクエリも許可されます。

  ```sql theme={null}
  SELECT * FROM url('https://www.google.com');
  SELECT * FROM url('https://www-google.com');
  ```

  これは、正規表現では `.` が `Any Single Character` として扱われるためです。
  そのため、潜在的な脆弱性につながる可能性があります。正しい権限付与は次のとおりです。

  ```sql theme={null}
  GRANT READ ON URL('https://www\.google\.com') TO john;
  ```
</Warning>

**GRANT OPTION を付けた再付与:**

元の権限付与に `WITH GRANT OPTION` が含まれている場合は、`GRANT CURRENT GRANTS` を使用して再付与できます:

```sql theme={null}
-- GRANT OPTIONを付与した元の権限付与
GRANT READ ON S3('s3://foo/.*') TO john WITH GRANT OPTION

-- Johnはこのアクセス権を他のユーザーに再付与できるようになる
GRANT CURRENT GRANTS(READ ON S3) TO alice
```

**重要な制限事項:**

* **部分的な取り消しはできません:** 付与済みのフィルターパターンの一部だけを取り消すことはできません。必要な場合は、付与全体をいったん取り消したうえで、新しいパターンで再付与する必要があります。
* **ワイルドカードによる権限付与はできません:** `GRANT READ ON *('regexp')` や、これに類するワイルドカードのみのパターンは使用できません。必ず具体的なソースを指定してください。

<div id="dictget">
  ### dictGet
</div>

* `dictGet`。別名: `dictHas`, `dictGetHierarchy`, `dictIsIn`

ユーザーに [dictGet](/ja/reference/functions/regular-functions/ext-dict-functions#dictGet)、[dictHas](/ja/reference/functions/regular-functions/ext-dict-functions#dictHas)、[dictGetHierarchy](/ja/reference/functions/regular-functions/ext-dict-functions#dictGetHierarchy)、[dictIsIn](/ja/reference/functions/regular-functions/ext-dict-functions#dictIsIn) 関数の実行を許可します。

権限レベル: `DICTIONARY`。

**例**

* `GRANT dictGet ON mydb.mydictionary TO john`
* `GRANT dictGet ON mydictionary TO john`

<div id="displaysecretsinshowandselect">
  ### displaySecretsInShowAndSelect
</div>

[`display_secrets_in_show_and_select` サーバー設定](/ja/reference/settings/server-settings/settings#display_secrets_in_show_and_select)
と
[`format_display_secrets_in_show_and_select` フォーマット設定](/ja/reference/settings/formats#format_display_secrets_in_show_and_select)
の両方が有効になっている場合、ユーザーは `SHOW` クエリおよび `SELECT` クエリでシークレットを表示できます。

<div id="named-collection-admin">
  ### NAMED COLLECTION ADMIN
</div>

指定した named collection に対する特定の操作を許可する権限です。バージョン 23.7 より前は NAMED COLLECTION CONTROL と呼ばれていましたが、23.7 以降は NAMED COLLECTION ADMIN が追加され、NAMED COLLECTION CONTROL は別名として維持されています。

* `NAMED COLLECTION ADMIN`. レベル: `NAMED_COLLECTION`. 別名: `NAMED COLLECTION CONTROL`
  * `CREATE NAMED COLLECTION`. レベル: `NAMED_COLLECTION`
  * `DROP NAMED COLLECTION`. レベル: `NAMED_COLLECTION`
  * `ALTER NAMED COLLECTION`. レベル: `NAMED_COLLECTION`
  * `SHOW NAMED COLLECTIONS`. レベル: `NAMED_COLLECTION`. 別名: `SHOW NAMED COLLECTIONS`
  * `SHOW NAMED COLLECTIONS SECRETS`. レベル: `NAMED_COLLECTION`. 別名: `SHOW NAMED COLLECTIONS SECRETS`
  * `NAMED COLLECTION`. レベル: `NAMED_COLLECTION`. 別名: `NAMED COLLECTION USAGE, USE NAMED COLLECTION`

他のすべての権限 (CREATE、DROP、ALTER、SHOW) とは異なり、NAMED COLLECTION 権限が追加されたのは 23.7 で、他はそれより前の 22.12 に追加されています。

**例**

named collection の名前が abc であるとすると、ユーザー john に CREATE NAMED COLLECTION 権限を付与します。

* `GRANT CREATE NAMED COLLECTION ON abc TO john`

<div id="table-engine">
  ### TABLE ENGINE
</div>

テーブル作成時に、指定したテーブルエンジンを使用できるようにします。[テーブルエンジン](/ja/reference/engines/table-engines/index) に適用されます。

**例**

* `GRANT TABLE ENGINE ON * TO john`
* `GRANT TABLE ENGINE ON TinyLog TO john`

<Note>
  デフォルトでは、後方互換性のため、特定のテーブルエンジンを指定したテーブル作成では権限チェックが無視されます。
  ただし、config.xml で [`table_engines_require_grant` to true](https://github.com/ClickHouse/ClickHouse/blob/df970ed64eaf472de1e7af44c21ec95956607ebb/programs/server/config.xml#L853-L855)
  を設定すると、この動作を変更できます。
</Note>

外部ソースを使用する一部のテーブルエンジンでは、対応するソースに対する `READ`/`WRITE` 権限が必要になる場合があります。[SOURCES](#sources) を参照してください。

たとえば、AzureBlobStorage テーブルエンジンでは、次の権限が必要になる場合があります。

* `GRANT READ, WRITE ON AZURE TO john`

<div id="all">
  ### ALL
</div>

規制対象エンティティに対するすべての権限を、ユーザーアカウントまたはロールに付与します。

<Note>
  権限 `ALL` は ClickHouse Cloud ではサポートされておらず、`default` ユーザーに付与される権限は制限されています。ユーザーに最大限の権限を付与するには、`default_role` を付与します。詳細は[こちら](/ja/products/cloud/guides/security/cloud-access-management/manage-cloud-users)を参照してください。
  また、`default` ユーザーとして `GRANT CURRENT GRANTS` を使用することで、`ALL` と同様の効果を得ることもできます。
</Note>

<div id="none">
  ### NONE
</div>

権限は一切付与されません。

<div id="admin-option">
  ### ADMIN OPTION
</div>

`ADMIN OPTION` 権限があると、ユーザーは自身のロールを別のユーザーに付与できます。
