Skip to main content
Edit this page

ClickHouseをLDAPで認証とロールマッピングに使用する設定

Note

このページはClickHouse Cloudには適用されません。ここで文書化されている機能は、ClickHouse Cloudサービスでは利用できません。 詳細は、ClickHouseのCloud Compatibilityガイドをご覧ください。

ClickHouseはLDAPを使用してClickHouseデータベースユーザーを認証するように設定できます。このガイドは、公開ディレクトリに認証するLDAPシステムとClickHouseを統合する簡単な例を示します。

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>
    Note

    <test_ldap_server>タグは特定のLDAPサーバーを識別するための任意のラベルです。

    上記で使用される基本設定は次の通りです:

    パラメータ説明
    hostLDAPサーバーのホスト名またはIPldap.forumsys.com
    portLDAPサーバーのディレクトリポート389
    bind_dnユーザーへのテンプレートパスuid={user_name},dc=example,dc=com
    enable_tls安全なLDAPを使用するかどうかno
    tls_require_cert接続に証明書を必要とするかどうかnever
    Note

    この例では、公開サーバーが389を使用し、安全なポートを使用しないため、デモ用にTLSを無効にしています。

    Note

    LDAP設定の詳細については、LDAPドキュメントページを参照してください。

  3. <user_directories> セクションに <ldap> セクションを追加して、ユーザーロールマッピングを構成します。このセクションでは、ユーザーが認証されたときにどのロールを受け取るかが定義されます。この基本的な例では、LDAPへの認証に成功したユーザーは、ClickHouseで後ほど定義される scientists_role を受け取ります。このセクションは次のようになります:

    <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
    rolesユーザーがマッピングされるClickHouseで定義されたロール名scientists_role
    base_dnグループを検索するベースパスdc=example,dc=com
    search_filterユーザーをマッピングするために選択すべきグループを識別するldap検索フィルター(&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))
    attribute戻されるべき値がある属性名cn
  4. 設定を適用するためにClickHouseサーバーを再起動します。

2. ClickHouseデータベースのロールと権限を構成

Note

このセクションの手順は、ClickHouseでSQLアクセス制御とアカウント管理が有効になっていることを前提としています。有効化するには、SQLユーザーとロールガイドを参照してください。

  1. config.xmlファイルのロールマッピングセクションで使用されているのと同じ名前でClickHouseにロールを作成します

    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 :)
    Note

    ステップ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への接続にも使用できます。