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

配置 ClickHouse 以使用 LDAP 进行身份验证和角色映射

ClickHouse Cloud 中不支持
注意

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

ClickHouse 可以配置为使用 LDAP 来验证 ClickHouse 数据库用户的身份。本指南提供了一个将 ClickHouse 与 LDAP 系统集成的简单示例,该系统对公共可用的目录进行身份验证。

1. 在 ClickHouse 中配置 LDAP 连接设置

  1. 测试您与此公共 LDAP 服务器的连接

    $ ldapsearch -x -b dc=example,dc=com -H ldap://ldap.forumsys.com

    回复将如下所示

    # extended LDIF
    #
    # LDAPv3
    # base <dc=example,dc=com> with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #

    # example.com
    dn: dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: example.com
    dc: example
    ...
  2. 编辑 config.xml 文件并添加以下内容以配置 LDAP

    <ldap_servers>
    <test_ldap_server>
    <host>ldap.forumsys.com</host>
    <port>389</port>
    <bind_dn>uid={user_name},dc=example,dc=com</bind_dn>
    <enable_tls>no</enable_tls>
    <tls_require_cert>never</tls_require_cert>
    </test_ldap_server>
    </ldap_servers>
    注意

    <test_ldap_server> 标签是用于标识特定 LDAP 服务器的任意标签。

    以下是上面使用的基本设置

    参数描述示例
    hostLDAP 服务器的主机名或 IPldap.forumsys.com
    portLDAP 服务器的目录端口389
    bind_dn用户的模板路径uid={user_name},dc=example,dc=com
    enable_tls是否使用安全 ldap
    tls_require_cert是否需要连接证书从不
    注意

    在此示例中,由于公共服务器使用 389 端口且不使用安全端口,因此我们禁用 TLS 以进行演示。

    注意

    查看 LDAP 文档页面 以获取有关 LDAP 设置的更多详细信息。

  3. <ldap> 部分添加到 <user_directories> 部分以配置用户角色映射。此部分定义了用户何时通过身份验证以及用户将收到的角色。在此基本示例中,任何通过 LDAP 身份验证的用户都将收到 scientists_role 角色,该角色将在 ClickHouse 的后续步骤中定义。该部分应类似于以下内容

    <user_directories>
    <users_xml>
    <path>users.xml</path>
    </users_xml>
    <local_directory>
    <path>/var/lib/clickhouse/access/</path>
    </local_directory>
    <ldap>
    <server>test_ldap_server</server>
    <roles>
    <scientists_role />
    </roles>
    <role_mapping>
    <base_dn>dc=example,dc=com</base_dn>
    <search_filter>(&amp;(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))</search_filter>
    <attribute>cn</attribute>
    </role_mapping>
    </ldap>
    </user_directories>

    以下是上面使用的基本设置

    参数描述示例
    server先前 ldap_servers 部分中定义的标签test_ldap_server
    rolesClickHouse 中定义的角色名称,用户将映射到这些角色scientists_role
    base_dn开始搜索包含用户的组的基本路径dc=example,dc=com
    search_filterldap 搜索过滤器,用于识别要选择以映射用户的组(&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))
    attribute应从哪个属性名称返回值cn
  4. 重新启动 ClickHouse 服务器以应用设置。

2. 配置 ClickHouse 数据库角色和权限

注意

本节中的过程假定已启用 ClickHouse 中的 SQL 访问控制和帐户管理。要启用,请查看 SQL 用户和角色指南

  1. 在 ClickHouse 中创建一个角色,其名称与 config.xml 文件的角色映射部分中使用的名称相同

    CREATE ROLE scientists_role;
  2. 向角色授予所需的权限。以下语句向任何能够通过 LDAP 验证身份的用户授予管理员权限

    GRANT ALL ON *.* TO scientists_role;

3. 测试 LDAP 配置

  1. 使用 ClickHouse 客户端登录

    $ clickhouse-client --user einstein --password password
    ClickHouse client version 22.2.2.1.
    Connecting to localhost:9000 as user einstein.
    Connected to ClickHouse server version 22.2.2 revision 54455.

    chnode1 :)
    注意

    使用步骤 1 中的 ldapsearch 命令查看目录中所有可用的用户,对于所有用户,密码均为 password

  2. 测试用户是否已正确映射到 scientists_role 角色并具有管理员权限

    SHOW DATABASES
    Query id: 93b785ff-1482-4eda-95b0-b2d68b2c5e0f

    ┌─name───────────────┐
    │ INFORMATION_SCHEMA │
    │ db1_mysql │
    │ db2 │
    │ db3 │
    │ db4_mysql │
    │ db5_merge │
    │ default │
    │ information_schema │
    │ system │
    └────────────────────┘

    9 rows in set. Elapsed: 0.004 sec.

总结

本文演示了配置 ClickHouse 以向 LDAP 服务器进行身份验证以及映射到角色的基础知识。还有一些选项可以在 ClickHouse 中配置单个用户,但让这些用户通过 LDAP 进行身份验证,而无需配置自动角色映射。LDAP 模块也可用于连接到 Active Directory。