# CREATE

创建一个新的实体,可以是以下种类之一:

# 创建数据库

创建一个新的数据库。

CREATE DATABASE [IF NOT EXISTS] db_name ON CLUSTER '{cluster}'

这将创建一个指定名称为 db_name 的新数据库。可选的 IF NOT EXISTS 子句只有在数据库不存在时才会创建数据库。

# 创建表

创建一个新的表。这个查询可以根据使用情况有不同的语法形式。

CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
    name1 [type1] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr1] [compression_codec] [TTL expr1],
    name2 [type2] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr2] [compression_codec] [TTL expr2],
    ...
) ENGINE = engine

在 db 数据库或当前数据库(如果未设置 db)中创建一个名为 table_name 的表,结构由括号中指定的列描述和引擎 engine 定义。表的结构是列描述、二级索引和约束的列表。如果引擎支持主键,它将作为表引擎的参数指定。

列描述在最简单的情况下是 name type。例如:RegionID UInt32。

如果需要,可以指定主键,使用一个或多个键表达式(见下文)。

# 主键

在创建表时可以定义主键。主键可以通过两种方式指定:

  • 在列列表中

    CREATE TABLE db.table_name
    (
        name1 type1, name2 type2, ...,
        PRIMARY KEY(expr1[, expr2,...])
    ) ENGINE = engine;
    
  • 在列列表之外

    CREATE TABLE db.table_name
    (
        name1 type1, name2 type2, ...
    ) ENGINE = engine
    PRIMARY KEY(expr1[, expr2,...]);
    

# 引擎

用于高负载任务的最通用和功能丰富的表引擎。这些引擎的共同特点是快速插入数据并进行后台数据处理。MergeTree 系列引擎支持数据复制(使用 Replicated* 版本的引擎)、分区、二级数据跳过索引以及其他其他引擎不支持的功能。

CREATE TABLE [db.]table_name
(
    id UInt32,
    name String
)
ENGINE = MergeTree

引擎系列包括:

  • MergeTree
  • ReplacingMergeTree
  • SummingMergeTree
  • AggregatingMergeTree
  • CollapsingMergeTree
  • VersionedCollapsingMergeTree
  • GraphiteMergeTree

# 创建用户

创建用户账户。

CREATE USER [IF NOT EXISTS | OR REPLACE] name1 ON CLUSTER '{cluster}'
    [NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name'}]
    [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
    [IN access_storage_type]
    [DEFAULT ROLE role [,...]]
    [DEFAULT DATABASE database | NONE]
    [GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]

# 身份验证

有多种用户身份验证方式:

  • IDENTIFIED WITH no_password

  • IDENTIFIED WITH plaintext_password BY 'qwerty'

  • IDENTIFIED WITH sha256_password BY 'qwerty' or IDENTIFIED BY 'password'

  • IDENTIFIED WITH sha256_hash BY 'hash' or IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'

  • IDENTIFIED WITH double_sha1_password BY 'qwerty'

  • IDENTIFIED WITH double_sha1_hash BY 'hash'

  • IDENTIFIED WITH bcrypt_password BY 'qwerty'

  • IDENTIFIED WITH bcrypt_hash BY 'hash'

  • IDENTIFIED WITH ldap SERVER 'server_name'

  • IDENTIFIED WITH kerberos or IDENTIFIED WITH kerberos REALM 'realm'

  • IDENTIFIED WITH ssl_certificate CN 'mysite.com:user'

  • IDENTIFIED BY 'qwerty'

# 用户主机

用户主机是可以与 ClickHouse 服务器建立连接的主机。主机可以在查询的 HOST 部分以以下方式指定:

  • HOST IP 'ip_address_or_subnetwork' — 用户只能从指定的 IP 地址或子网连接到 ClickHouse 服务器。例如:HOST IP '192.168.0.0/16'HOST IP '2001:DB8::/32'。在生产环境中,只指定 HOST IP 元素(IP 地址及其掩码),因为使用 hosthost_regexp 可能会导致额外的延迟。

  • HOST ANY — 用户可以从任何位置连接。这是默认选项。

  • HOST LOCAL — 用户只能本地连接。

  • HOST NAME 'fqdn' — 用户主机可以指定为 FQDN。例如:HOST NAME 'mysite.com'

  • HOST REGEXP 'regexp' — 在指定用户主机时可以使用 pcre 正则表达式。例如:HOST REGEXP '.*\.mysite\.com'

  • HOST LIKE 'template' — 允许使用 LIKE 运算符过滤用户主机。例如:HOST LIKE '%' 等同于 HOST ANYHOST LIKE '%.mysite.com' 过滤 mysite.com 域中的所有主机。

另一种指定主机的方式是在用户名后使用 @ 语法。例如:

  • CREATE USER mira@'127.0.0.1' — 等同于 HOST IP 语法。

  • CREATE USER mira@'localhost' — 等同于 HOST LOCAL 语法。

  • CREATE USER mira@'192.168.%.%' — 等同于 HOST LIKE 语法。

# GRANTEES 子句

指定允许从此用户获得权限的用户或角色,前提是该用户还具有通过 GRANT OPTION 授予的所有所需访问权限。GRANTEES 子句的选项:

  • user — 指定此用户可以授予权限的用户。

  • role — 指定此用户可以授予权限的角色。

  • ANY — 此用户可以授予权限给任何人。这是默认设置。

  • NONE — 此用户不能授予权限给任何人。

可以使用 EXCEPT 表达式排除任何用户或角色。例如,CREATE USER user1 GRANTEES ANY EXCEPT user2。这意味着如果 user1 具有通过 GRANT OPTION 授予的某些权限,它将能够将这些权限授予除 user2 之外的任何人。

# 创建角色

创建新角色。角色是一组权限 (opens new window)。被分配角色的用户获得该角色的所有权限。

CREATE ROLE [IF NOT EXISTS | OR REPLACE] name1 ON CLUSTER '{cluster}'
    [IN access_storage_type]
    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [CONST|READONLY|WRITABLE|CHANGEABLE_IN_READONLY] | PROFILE 'profile_name'] [,...]

# 管理角色

一个用户可以被分配多个角色。用户可以通过 SET ROLE 语句以任意组合应用其分配的角色。最终的权限范围是所有应用角色的权限的组合。如果用户直接被授予了权限,这些权限也与角色授予的权限合并。

用户可以有默认角色,这些角色在用户登录时应用。要设置默认角色,请使用 SET DEFAULT ROLE 语句或 ALTER USER 语句。

要撤销角色,请使用 REVOKE (opens new window) 语句。

要删除角色,请使用 DROP ROLE 语句。被删除的角色将自动从所有分配给它的用户和角色中撤销。

# 相关内容

  • 有关向量相关的 CREATE 语句,请参阅向量搜索

  • 通过使用 MyScale RBAC(基于角色的访问控制)功能,您可以有效地管理多个用户之间的数据共享。有关创建用户和角色的更高级用法,请参阅访问控制

Last Updated: Sat Apr 13 2024 10:45:55 GMT+0000