配置 ClickHouse 使用 LDAP 进行身份验证和角色映射
此页面不适用于 ClickHouse 云。此处记录的功能在 ClickHouse 云服务中不可用。有关更多信息,请参阅 ClickHouse 云兼容性 指南。
ClickHouse 可以配置为使用 LDAP 身份验证 ClickHouse 数据库用户。本指南提供了一个将 ClickHouse 与身份验证到公开可用目录的 LDAP 系统集成的简单示例。
1. 在 ClickHouse 中配置 LDAP 连接设置
测试您对该公共 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
...编辑
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 服务器的任意标签。这些是上面使用的基本设置
参数 描述 示例 主机 LDAP 服务器的主机名或 IP 地址 ldap.forumsys.com 端口 LDAP 服务器的目录端口 389 bind_dn 到用户的模板路径 uid={user_name},dc=example,dc=com enable_tls 是否使用安全 ldap 否 tls_require_cert 是否需要连接证书 从不 注意在本示例中,由于公共服务器使用 389 并且不使用安全端口,因此出于演示目的,我们禁用了 TLS。
注意查看 LDAP 文档页面 以了解有关 LDAP 设置的更多详细信息。
将
<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>(&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))</search_filter>
<attribute>cn</attribute>
</role_mapping>
</ldap>
</user_directories>这些是上面使用的基本设置
参数 描述 示例 服务器 在先前 ldap_servers 部分中定义的标签 test_ldap_server 角色 在 ClickHouse 中定义的用户将被映射到的角色的名称 scientists_role base_dn 开始搜索包含用户的组的基本路径 dc=example,dc=com search_filter 用于标识要选择以映射用户的组的 LDAP 搜索过滤器 (&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn})) 属性 应从哪个属性名称返回值 cn
- 重新启动 ClickHouse 服务器以应用设置。
2. 配置 ClickHouse 数据库角色和权限
本节中的过程假设 ClickHouse 中的 SQL 访问控制和帐户管理已启用。若要启用,请查看 SQL 用户和角色指南。
在 clickhouse 中创建一个与
config.xml
文件的角色映射部分中使用的名称相同的角色CREATE ROLE scientists_role;
授予角色所需的权限。以下语句授予能够通过 LDAP 身份验证的任何用户的管理员权限
GRANT ALL ON *.* TO scientists_role;
3. 测试 LDAP 配置
使用 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
测试用户是否已正确映射到
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。