users.xml 配置文件中的 users 部分包含用户设置。
ClickHouse 也支持通过 SQL 驱动的工作流 管理用户。我们建议优先使用这种方式。
users 部分的结构:
user_name/password
-
如需将密码设为明文 (不推荐) ,请将其放在
password元素中。 例如:<password>qwerty</password>。密码也可以留空。
-
如需使用密码的 SHA256 哈希值,请将其放在
password_sha256_hex元素中。 例如:<password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>。 在 shell 中生成密码的示例:结果的第一行是密码,第二行是对应的 SHA256 哈希值。
-
为兼容 MySQL 客户端,密码也可以指定为 double SHA1 哈希值。请将其放在
password_double_sha1_hex元素中。 例如:<password_double_sha1_hex>08b4a0f1de6ad37da17359e592c8d74788a83eb0</password_double_sha1_hex>。 在 shell 中生成密码的示例:结果的第一行是密码,第二行是对应的 double SHA1 哈希值。
TOTP 身份验证配置
users.xml 配置文件进行设置。
目前,SQL 驱动的访问控制尚不支持此功能。
使用 TOTP 进行身份验证时,用户必须提供主密码,以及由其 TOTP 应用生成的一次性密码;可以通过 --one-time-password 命令行选项提供,也可以使用 ’+’ 字符将其拼接到主密码后。
例如,如果主密码为 some_password,生成的 TOTP 代码为 345123,则用户在连接到 ClickHouse 时可以指定 --password some_password+345123 或 --password some_password --one-time-password 345123。如果未指定密码,clickhouse-client 会以交互方式提示输入。
要为用户启用 TOTP 身份验证,请在 users.xml 中配置 time_based_one_time_password 部分。该部分定义了 TOTP 设置,例如 secret、有效期、位数和哈希算法。
示例
password 或 password_sha256_hex) 中,额外添加一个 time_based_one_time_password 部分。
可以使用 qrencode 工具为 TOTP 密钥生成二维码。
用户名/ssh-key
该设置支持使用 SSH 密钥进行身份验证。 给定一个 SSH 密钥 (例如使用ssh-keygen 生成的密钥) ,如下所示
ssh_key 元素应为
ssh-ed25519 替换为 ssh-rsa 或 ecdsa-sha2-nistp256。
多种身份验证方法
可以使用<auth_methods> 元素为单个用户配置多种身份验证方法。这样,用户可以通过列出的任意一种方法进行身份验证——例如,某个用户既可以同时设置密码和 LDAP 凭据,也可以使用其中任意一种成功登录。
<auth_methods> 的每个子元素都是一个可任意命名的包装元素,其中必须且只能包含一种身份验证类型。包装元素的名称 (例如 <method1>、<primary>、<a1>) 并不重要;实际生效的只有内部的身份验证元素。
示例:多个密码
<auth_methods> 中支持以下身份验证类型:
password— 明文密码password_sha256_hex— SHA256 密码哈希password_scram_sha256_hex— SCRAM-SHA-256 密码哈希password_double_sha1_hex— double SHA1 密码哈希ldap— LDAP 服务器身份验证kerberos— Kerberos 身份验证ssl_certificates— SSL 证书身份验证ssh_keys— SSH 密钥身份验证http_authentication— HTTP 身份验证
<auth_methods>不能与在用户级别指定的身份验证方法同时使用。请二选一,不要混用。<auth_methods>必须至少包含一种身份验证方法。<auth_methods>中的每个包装元素都必须且只能包含一种身份验证类型 (<ssh_keys>除外;出于向后兼容考虑,它可以包含多个) 。- TOTP (
<time_based_one_time_password>) 在用户级别指定 (即位于<auth_methods>之外) ,并适用于列表中所有基于密码的身份验证方法。启用 TOTP 时,至少需要一种基于密码的身份验证方法。
auth_methods
<password>) ,而 LDAP 方法则独立对外部服务器进行身份验证。
access_management
此设置用于启用或禁用用户对基于 SQL 的访问控制与账户管理的使用。 可能的值:- 0 — 禁用。
- 1 — 启用。
授权
此设置允许向所选用户授予任意权限。 列表中的每个元素都应为不指定任何被授权方的GRANT 查询。
示例:
dictionaries、access_management、named_collection_control、show_named_collections_secrets
以及 allow_databases 设置同时指定。
user_name/networks
允许用户连接到 ClickHouse 服务器的网络列表。 列表中的每个元素都可以采用以下形式之一:-
<ip>— IP 地址或网络掩码。 示例:213.180.204.3、10.0.0.1/8、10.0.0.1/255.255.255.0、2a02:6b8::3、2a02:6b8::3/64、2a02:6b8::3/ffff:ffff:ffff:ffff::。 -
<host>— 主机名。 示例:example01.host.ru。 检查访问权限时,会执行一次 DNS 查询,并将返回的所有 IP 地址与 peer 地址进行比对。 -
<host_regexp>— 主机名的正则表达式。 示例:^example\d\d-\d\d-\d\.host\.ru$检查访问权限时,会先针对 peer 地址执行一次 DNS PTR 查询,然后应用指定的正则表达式。接着,会对 PTR 查询结果再次执行 DNS 查询,并将返回的所有地址与 peer 地址进行比对。强烈建议正则表达式以$结尾。
除非已正确配置防火墙,或服务器未直接连接到 Internet,否则允许任何网络访问都是不安全的。
user_name/profile
你可以为用户指定一个设置 profile。设置 profile 在users.xml 文件的单独章节中配置。更多信息,请参见 设置 profile。
user_name/quota
配额可用于跟踪或限制一段时间内的资源使用量。配额在users.xml 配置文件的 quotas
部分中进行配置。
您可以为用户分配一组配额。有关配额配置的详细说明,请参阅 Quotas。
user_name/databases
在本节中,您可以限制 ClickHouse 向当前用户发出的SELECT 查询返回哪些行,从而实现基础的行级安全控制。
示例
以下配置会强制用户 user1 在 SELECT 查询结果中只能看到 table1 中 id 字段值为 1000 的行。
filter 可以是任何结果为 UInt8 类型值的表达式。它通常包含比较和逻辑运算符。对于此用户,database_name.table1 中 filter 结果为 0 的行将不会被返回。此过滤器与 PREWHERE 操作不兼容,并会禁用 WHERE→PREWHERE 优化。
角色
你可以通过user.xml 配置文件中的 roles 部分创建任意预定义角色。
roles 部分的结构:
users 部分向用户授予这些角色: