メインコンテンツまでスキップ
バージョン: 4.0 GA

LDAP 認証

StarRocks は、ネイティブなパスワードベースの認証に加えて、LDAP 認証もサポートしています。

このトピックでは、StarRocks で LDAP を使用してユーザーを手動で作成し、認証する方法について説明します。セキュリティインテグレーションを使用して StarRocks を LDAP サービスと統合する方法については、Authenticate with Security Integration を参照してください。LDAP サービスでユーザーグループを認証する方法については、Authenticate User Groups を参照してください。

LDAP 認証を有効にする

LDAP 認証を使用するには、まず LDAP サービスを FE ノードの設定に追加する必要があります。

# LDAP サービスの IP アドレスを追加します。
authentication_ldap_simple_server_host =
# LDAP サービスのポートを追加します。デフォルト値は 389 です。
authentication_ldap_simple_server_port =
# LDAP サーバへの暗号化されていない接続を許可するかどうか。デフォルト値: `true`. この値を `false` に設定すると、LDAP へのアクセスに SSL 暗号化が必要であることを示します。
authentication_ldap_simple_ssl_conn_allow_insecure =
# LDAP サーバーの SSL CA 証明書を格納するローカルパス。pem および jks 形式をサポートします。証明書が信頼できる組織によって発行されている場合は、この項目を設定する必要はありません。
authentication_ldap_simple_ssl_conn_trust_store_path =
# LDAP サーバーのローカルに保存された SSL CA 証明書にアクセスするために使用されるパスワード。pem 形式の証明書にはパスワードは必要ありません。パスワードが必要なのは jsk 形式の証明書だけです。
authentication_ldap_simple_ssl_conn_trust_store_pwd =

StarRocks が LDAP システム内でユーザーを直接取得する方法でユーザーを認証したい場合(検索バインドモード)は、以下の追加設定項目を追加する必要があります

# ユーザーのベース DN を追加し、ユーザーの取得範囲を指定します。
authentication_ldap_simple_bind_base_dn =
# ログイン名を保持する属性の名前を追加します。デフォルトは uid(OpenLDAP の慣例)です。
# Active Directory では sAMAccountName を使用してください。
authentication_ldap_simple_user_search_attr =
# ユーザーを取得するための管理者 DN を追加します。
authentication_ldap_simple_bind_root_dn =
# ユーザーを取得するための管理者パスワードを追加します。
authentication_ldap_simple_bind_root_pwd =

ダイレクトバインドモード(検索ステップをスキップし、構築した DN で直接バインドする)を使用する場合は、DN パターンを設定できます。ユーザー DN の構造が予測可能な場合に便利です。

# ダイレクトバインド認証の DN パターン。
# ユーザー名のプレースホルダーとして ${USER} を使用します。
# 複数のパターンはセミコロン ';' で区切ります。
authentication_ldap_simple_bind_dn_pattern =

例: uid=${USER},ou=People,dc=example,dc=com

ユーザーが複数の OU に分散している場合は、セミコロンで区切って複数のパターンを指定できます:

uid=${USER},ou=Engineering,dc=example,dc=com;uid=${USER},ou=Marketing,dc=example,dc=com

システムは各パターンを順番に試行し、最初にバインドに成功した結果を返します。

注記

パターンは有効な LDAP Distinguished Name(DN)を生成する必要があります。${USER}@corp.example.com のような UPN 形式のパターンはサポートされていません。結果が DN ではないため、ダウンストリームのグループ検索が失敗します。DN の属性値に @ が含まれる場合(例: uid=${USER}@corp.example.com,ou=People,dc=example,dc=com)は有効です。

DN マッチングメカニズム

v3.5.0 以降、StarRocks は LDAP 認証時にユーザーの識別名 (DN) 情報を記録および渡す機能をサポートし、より正確なグループ解決を実現します。

動作原理

  1. 認証フェーズ: LDAPAuthProviderは、ユーザー認証成功後に以下の2つの情報を記録します:

    • ログインユーザー名(従来のグループマッチング用)
    • ユーザーの完全なDN(DNベースのグループマッチング用)
  2. グループ解決フェーズ: LDAPGroupProvider は、ldap_user_search_attr パラメータの設定に基づいてマッチング戦略を決定します:

    • ldap_user_search_attr が設定されている場合、グループマッチングのキーとしてユーザー名を使用します。
    • ldap_user_search_attr が設定されていない場合、グループマッチングのキーとして DN を使用します。

使用例

  • 従来の LDAP 環境: グループメンバーは単純なユーザー名(cn 属性など)を使用します。管理者は ldap_user_search_attr を設定する必要があります。
  • Microsoft AD 環境: グループメンバーにユーザー名属性が存在しない場合があります。ldap_user_search_attr は設定できません。システムは直接 DN を使用して照合を行います。
  • 混合環境: 両方の照合方法を柔軟に切り替えることがサポートされています。

認証の優先順位

ユーザーが LDAP 認証でログインする際、StarRocks は以下の優先順位でユーザーの DN を決定します:

  1. ユーザー指定の DN: ユーザー作成時に明示的な DN が指定されている場合(CREATE USER ... AS 'dn')、その DN が直接使用されます。
  2. DN パターンによるダイレクトバインド: authentication_ldap_simple_bind_dn_pattern が設定されている場合、システムはパターンから DN を構築し、直接バインドを試みます。複数のパターンは順番に試行されます。
  3. 検索バインド: 上記のいずれも該当しない場合、システムは管理者アカウントを使用して LDAP 内のユーザーを検索し、見つかった DN でバインドします。

ユーザーエントリーからグループを解決する(memberOf)

v4.2 以降、LDAP ユーザーのグループは、設定でどのグループを参照するかを宣言する代わりに、ユーザー自身のエントリーのグループメンバーシップ属性から読み取ることができます。この場合、ディレクトリー側で新しく作成されたグループは、設定を変更しなくても次回ログイン時に反映されます。

2 つの FE 設定項目で制御します。どちらも動的に変更できます。

# グループの取得元: group_provider(デフォルト)| memberof | both
authentication_ldap_simple_group_source = group_provider
# ユーザーエントリー上でグループメンバーシップを保持する属性名
authentication_ldap_simple_memberof_attr = memberOf
  • group_provider(デフォルト)は以前のバージョンと同じ動作で、Group Provider のみを使用します。
  • memberof はユーザー自身のエントリーの属性のみを使用します。設定された Group Provider は無視されますが、設定は保持されます。
  • both は両方の和集合を返します。

memberOf は Active Directory および memberof overlay を導入した OpenLDAP に適合します。Oracle Directory Server と 389 Directory Server は isMemberOf を使用します。

これらはクラスター全体のデフォルト値です。security integration は同名のプロパティで両方を上書きできます。LDAP サービスごとに設定する場合はこちらが推奨されます。各認証モードで属性がどのように読み取られるか、および対象外となるもの(ネストされたグループ、Active Directory のプライマリーグループ、クロスドメインのグループ)を含む完全な動作は Security Integration を参照してください。

注記

明示的な DN を指定して作成されたユーザー(CREATE USER ... IDENTIFIED WITH authentication_ldap_simple AS '<dn>')は、この機能をサポートしません。この形式は廃止予定のユーザー単位の旧メカニズムであり、そのグループ解決の動作は変更されません。ユーザー作成時に AS '<dn>' を省略するか、security integration を使用してください。

大文字小文字の扱い

LDAP 関連の設定には統一した答えはありません。FE が比較する値とディレクトリーが比較する値があるため、以下の表で項目ごとに示します。

項目比較する場所大文字小文字を区別するか
属性名: authentication_ldap_simple_user_search_attrauthentication_ldap_simple_memberof_attrディレクトリー、および FE が結果を読み取るとき区別しません。 LDAP の属性名(attribute description)は定義上大文字小文字を区別しないため、memberofmemberOf は同じ属性です。
authentication_ldap_simple_group_sourceFE区別しません。 前後の空白も無視されます。認識できない値は CREATE / ALTER SECURITY INTEGRATION では拒否され、FE 設定項目から渡された場合は group_provider にフォールバックしてログに ERROR を出します。
DN の値: authentication_ldap_simple_bind_root_dn..._bind_base_dn..._bind_dn_patternディレクトリーディレクトリー次第です。 DN 内の属性タイプ(cn=ou=dc=)は常に大文字小文字を区別しません。値を区別するかは各属性のマッチングルールによりますが、一般的な cn / ou / dc は区別しません。
ログイン名FE、ディレクトリーに送る前区別しません。 検索フィルターに入れる前、またはバインド DN パターンに代入する前に小文字に変換されます。これは Active Directory がアカウント名を扱う方式に合わせたものです。
グループ名FE照合では区別せず、表示では原文を保ちます。 GRANT ... TO EXTERNAL GROUPpermitted_groups は大文字小文字を無視して照合されますが、グループ名の文字列自体は書き換えられません。current_group() と Apache Ranger に渡されるグループ集合は、ディレクトリーが返した表記をそのまま保ちます。Ranger はグループ名を大文字小文字を区別して照合するため、そのポリシーはディレクトリー側の表記に合わせる必要があります。

LDAP でユーザーを作成する

ユーザーを作成する際、認証方法を LDAP 認証として IDENTIFIED WITH authentication_ldap_simple AS 'xxx' と指定します。xxx は LDAP 内のユーザーの DN (Distinguished Name) です。

例 1: 明示的な DN を指定してユーザーを作成する。

CREATE USER tom IDENTIFIED WITH authentication_ldap_simple AS 'uid=tom,ou=company,dc=example,dc=com'

例 2: DN を指定せずにユーザーを作成する。設定に応じて、ログイン時に DN パターン(ダイレクトバインド)または検索バインドによって DN が解決されます。

CREATE USER tom IDENTIFIED WITH authentication_ldap_simple

検索バインドモードを使用する場合、FE に以下の追加設定が必要です:

  • authentication_ldap_simple_bind_base_dn: ユーザーのベース DN で、ユーザーの取得範囲を指定します。
  • authentication_ldap_simple_user_search_attr: LDAP オブジェクト内でユーザーを識別する属性の名前で、デフォルトは uid です。
  • authentication_ldap_simple_bind_root_dn: ユーザー情報を取得する際に使用する管理者アカウントの DN です。
  • authentication_ldap_simple_bind_root_pwd: ユーザー情報を取得する際に使用する管理者アカウントのパスワードです。

ダイレクトバインドモードを使用する場合は、authentication_ldap_simple_bind_dn_pattern を設定するだけで、管理者アカウントは不要です。

ユーザーを認証する

LDAP 認証では、クライアントがクリアテキストのパスワードを StarRocks に渡す必要があります。クリアテキストのパスワードを渡す方法は 3 つあります。

MySQL クライアントから LDAP で接続する

実行時に --default-auth mysql_clear_password --enable-cleartext-plugin を追加します。

mysql -utom -P9030 -h127.0.0.1 -p --default-auth mysql_clear_password --enable-cleartext-plugin

JDBC/ODBC クライアントから LDAP で接続する

  • JDBC

JDBC 接続を使用する場合、サーバー側で SSL を有効にする必要があることに注意してください。

JDBC 5:

Properties properties = new Properties();
properties.put("authenticationPlugins", "com.mysql.jdbc.authentication.MysqlClearPasswordPlugin");
properties.put("defaultAuthenticationPlugin", "com.mysql.jdbc.authentication.MysqlClearPasswordPlugin");
properties.put("disabledAuthenticationPlugins", "com.mysql.jdbc.authentication.MysqlNativePasswordPlugin");

JDBC 8:

Properties properties = new Properties();
properties.put("authenticationPlugins", "com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin");
properties.put("defaultAuthenticationPlugin", "com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin");
properties.put("disabledAuthenticationPlugins", "com.mysql.cj.protocol.a.authentication.MysqlNativePasswordPlugin");
  • ODBC

ODBC の DSN に default\_auth=mysql_clear_passwordENABLE_CLEARTEXT\_PLUGIN=1 を追加し、ユーザー名とパスワードを指定します。