跳到主要内容
跳到主要内容
编辑此页

HTTP

ClickHouse Cloud 中不支持
注意

此页面不适用于 ClickHouse Cloud。此处记录的功能在 ClickHouse Cloud 服务中不可用。有关更多信息,请参阅 ClickHouse Cloud 兼容性指南。

HTTP 服务器可用于验证 ClickHouse 用户身份。HTTP 身份验证只能用作现有用户的外部身份验证器,这些用户在 users.xml 或本地访问控制路径中定义。目前,支持使用 GET 方法的 Basic 身份验证方案。

HTTP 身份验证服务器定义

要定义 HTTP 身份验证服务器,您必须将 http_authentication_servers 部分添加到 config.xml

示例

<clickhouse>
<!- ... -->
<http_authentication_servers>
<basic_auth_server>
<uri>https://127.0.0.1:8000/auth</uri>
<connection_timeout_ms>1000</connection_timeout_ms>
<receive_timeout_ms>1000</receive_timeout_ms>
<send_timeout_ms>1000</send_timeout_ms>
<max_tries>3</max_tries>
<retry_initial_backoff_ms>50</retry_initial_backoff_ms>
<retry_max_backoff_ms>1000</retry_max_backoff_ms>
</basic_auth_server>
</http_authentication_servers>
</clickhouse>

请注意,您可以在 http_authentication_servers 部分中使用不同的名称定义多个 HTTP 服务器。

参数

  • uri - 用于发出身份验证请求的 URI

用于与服务器通信的套接字上的超时时间,以毫秒为单位

  • connection_timeout_ms - 默认值:1000 毫秒。
  • receive_timeout_ms - 默认值:1000 毫秒。
  • send_timeout_ms - 默认值:1000 毫秒。

重试参数

  • max_tries - 进行身份验证请求的最大尝试次数。默认值:3
  • retry_initial_backoff_ms - 重试时的初始退避间隔。默认值:50 毫秒
  • retry_max_backoff_ms - 最大退避间隔。默认值:1000 毫秒

users.xml 中启用 HTTP 身份验证

为了为用户启用 HTTP 身份验证,请在用户定义中指定 http_authentication 部分,而不是 password 或类似的节。

参数

  • server - 在主 config.xml 文件中配置的 HTTP 身份验证服务器的名称,如前所述。
  • scheme - HTTP 身份验证方案。现在仅支持 Basic。默认值:Basic

示例(进入 users.xml

<clickhouse>
<!- ... -->
<my_user>
<!- ... -->
<http_authentication>
<server>basic_server</server>
<scheme>basic</scheme>
</http_authentication>
</test_user_2>
</clickhouse>
注意

请注意,HTTP 身份验证不能与任何其他身份验证机制一起使用。如果 http_authentication 旁边存在任何其他部分(如 password),将强制 ClickHouse 关闭。

使用 SQL 启用 HTTP 身份验证

SQL 驱动的访问控制和帐户管理在 ClickHouse 中启用时,也可以使用 SQL 语句创建通过 HTTP 身份验证识别的用户。

CREATE USER my_user IDENTIFIED WITH HTTP SERVER 'basic_server' SCHEME 'Basic'

...或者,Basic 是默认值,无需显式方案定义

CREATE USER my_user IDENTIFIED WITH HTTP SERVER 'basic_server'

传递会话设置

如果来自 HTTP 身份验证服务器的响应正文具有 JSON 格式并包含 settings 子对象,ClickHouse 将尝试将其键:值对解析为字符串值,并将它们设置为已验证用户当前会话的会话设置。如果解析失败,则服务器的响应正文将被忽略。