Перейти к основному содержанию
Перейти к основному содержанию

Настройка ClickHouse для использования LDAP при аутентификации и сопоставлении ролей

Not supported in ClickHouse Cloud
Примечание

This page is not applicable to ClickHouse Cloud. The feature documented here is not available in ClickHouse Cloud services. See the ClickHouse Cloud Compatibility guide for more information.

ClickHouse можно настроить на использование LDAP для аутентификации пользователей базы данных. В этом руководстве приведён простой пример интеграции ClickHouse с системой LDAP, которая аутентифицирует пользователей по общедоступному каталогу.

1. Настройка параметров подключения LDAP в ClickHouse

  1. Протестируйте подключение к этому публичному серверу LDAP:

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

    Ответ будет примерно таким:

    # расширенный LDIF
    #
    # LDAPv3
    # база <dc=example,dc=com> с областью subtree
    # фильтр: (objectclass=*)
    # запрос: 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.

    Ниже перечислены основные параметры, используемые выше:

    ParameterDescriptionExample
    hostимя хоста или IP сервера LDAPldap.forumsys.com
    portпорт каталога для сервера LDAP389
    bind_dnшаблон пути к пользователямuid={user_name},dc=example,dc=com
    enable_tlsиспользовать ли защищённый LDAPno
    tls_require_certтребовать ли сертификат для подключенияnever
    Примечание

    В этом примере, поскольку публичный сервер использует порт 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>
    

    Ниже перечислены основные параметры, используемые выше:

    ParameterDescriptionExample
    serverметка, определённая в предыдущем разделе ldap_serverstest_ldap_server
    rolesимена ролей в ClickHouse, к которым будут сопоставлены пользователиscientists_role
    base_dnбазовый путь, с которого начинается поиск групп с пользователемdc=example,dc=com
    search_filterфильтр поиска LDAP для определения групп, выбираемых для сопоставления пользователей(&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))
    attributeиз какого атрибута должно возвращаться значениеcn
  4. Перезапустите сервер ClickHouse, чтобы применить настройки.

2. Настройте роли и разрешения базы данных ClickHouse

Примечание

В этом разделе предполагается, что в ClickHouse включены управление доступом на уровне SQL и управление учётными записями (SQL Access Control and Account Management). Инструкции по включению см. в руководстве SQL Users and Roles.

  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 :)
    
    Примечание

    Используйте команду ldapsearch на шаге 1, чтобы просмотреть всех пользователей, доступных в каталоге. Для всех этих пользователей пароль — 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.