CREATE USER语法用于在云数据库ClickHouse中创建新用户。以下是CREATE USER语句的基本语法结构:
CREATE USER [IF NOT EXISTS] user_name
[IDENTIFIED [WITH {PLAINTEXT_PASSWORD | SHA256_PASSWORD}] BY 'password']
[DEFAULT ROLE role_name]
[SETTINGS setting_name = setting_value, ...]
其中的关键要素包括:
- IF NOT EXISTS:可选项,表示如果用户已经存在,则不执行创建操作。
- user_name:指定用户的名称。
- IDENTIFIED:可选项,用于指定用户的身份验证方式。可以选择明文密码(PLAINTEXT_PASSWORD)或SHA256哈希密码(SHA256_PASSWORD)。
- 'password':指定用户的密码,需根据选择的身份验证方式进行正确的格式化。
- DEFAULT ROLE:可选项,指定用户的默认角色(role_name)。
- SETTINGS:可选项,用于指定用户的其他设置,例如最大查询并发数、查询超时时间等。
下面是一些示例的CREATE USER语句。
示例1
CREATE USER IF NOT EXISTS myuser
IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'mypassword'
DEFAULT ROLE myrole
SETTINGS max_concurrent_queries = 10;
该语句创建了一个名为myuser的用户,使用明文密码进行身份验证,并设置了默认角色为myrole。同时,设置了max_concurrent_queries参数为10。
示例2
用户名为name1且无需密码 - 这显然不太安全:
CREATE USER name1 NOT IDENTIFIED
示例3
指定明文密码:
CREATE USER name2 IDENTIFIED WITH plaintext_password BY 'my_password'
由于密码以明文形式存储在/var/lib/clickhouse/access目录下的SQL文本文件中,因此不建议使用明文密码不是一个好主意,可以尝试使用sha256_password。
最常见的选择是使用SHA-256散列算法对密码进行哈希。当指定IDENTIFIED WITH sha256_password时,云数据库ClickHouse会为您对密码进行哈希处理。例如:
CREATE USER name3 IDENTIFIED WITH sha256_password BY 'my_password'
name3用户现在可以使用my_password登录,但密码以上述哈希值的形式存储。以下SQL文件在服务器启动时被创建并执行:
/var/lib/clickhouse/access $ cat 3843f510-6ebd-a52d-72ac-e021686d8a93.sql
ATTACH USER name3 IDENTIFIED WITH sha256_hash BY '0C268556C1680BEF0640AAC1E7187566704208398DA31F03D18C74F5C5BE5053' SALT '4FB16307F5E10048196966DD7E6876AE53DE6A1D1F625488482C75F14A5097C7';
如果您已经为用户名创建了散列值和相应的盐值,那么可以使用IDENTIFIED WITH sha256_hash BY 'hash'或IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'。对于带有SALT的sha256_hash,哈希值必须从'password'和'salt'的串联中计算得出。
示例4
double_sha1_password
通常不常用,但在与需要此选项的客户端(如MySQL接口)进行交互时非常方便:
CREATE USER name4 IDENTIFIED WITH double_sha1_password BY 'my_password'
云数据库ClickHouse生成并执行以下查询:
CREATE USER name4 IDENTIFIED WITH double_sha1_hash BY 'CCD3A959D6A004B9C3807B728BC2E55B67E10518'
说明具体的语法和选项可能因云数据库ClickHouse版本和特定配置而有所不同。