LDAP 認証

Virtual DataPort では、LDAP (Lightweight Directory Access Protocol) を使用してクライアントを認証できます。LDAP 認証を使用するように構成されている Virtual DataPort は、ユーザーの認証を LDAP サーバーに委任します。 通常 認証を使用するメリットは、Microsoft Windows Active Directory などの LDAP サーバーを使用してユーザーを認証できることです。これによりユーザーとその権限の管理が簡単になります。

Virtual DataPort で LDAP 認証を使用するには、LDAP サーバーでユーザーが割り当てたグループの名前を使用して、Virtual DataPort 内でのロールを定義する必要があります。その後、これらのロールに権限を割り当てます。

実行時にユーザーが Virtual DataPort に接続するとき、VDP は LDAP サーバーに接続してユーザーの資格情報を確認します。資格情報が正しければ、サーバーはこのユーザーに割り当てられているロールの名前を取得します。ユーザーが実行権限を与えられる操作は、Virtual DataPort で定義されているロールに割り当てられた権限に基づいて決定されます。

注釈

クライアントが Kerberos 認証を使用して Virtual DataPort に接続するときは、データベースの認証タイプは重要ではありません。ユーザーに付与される権限は、Kerberos 構成ダイアログで選択された LDAP サーバーから取得された、そのユーザーのロールに依存するためです (「 Virtual DataPort サーバーでの Kerberos 認証の設定 」のセクションを参照)。

ユーザーが LDAP 認証を使用して Virtual DataPort に接続しようとすると、サーバーは以下のことを行います。

  1. ユーザー名が Virtual DataPort ユーザーに属しているかどうかを確認します。属している場合は、そのパスワードが正しいことを確認します。正しくなければ、エラーを返します。

  2. ユーザー名が Virtual DataPort ユーザーでなければ、LDAP サーバーに接続して、そのユーザーの資格情報を確認します。資格情報が正しければ、ユーザーのロールを取得します。資格情報が正しくなければ、エラーを返します。

「user1」という名前の Virtual DataPort ユーザーが存在し、同じユーザー名のユーザーが LDAP サーバーに存在する場合、サーバーは、ローカルユーザー「user1」に割り当てられている権限を使用します。

Virtual DataPort では、サーバー全体またはデータベースのセットのみに対して LDAP 認証を有効にできます。グローバル LDAP 認証では、すべての Virtual DataPort データベースに対して同じ LDAP サーバーを使用します。認証タイプを編集することで、Virtual DataPort データベースに対してさまざまな LDAP サーバーを構成できます。その方法については、「 Virtual DataPort データベースに対する LDAP 認証の有効化 」のセクションを参照してください。

LDAP 認証を有効にするための初期構成

LDAP 認証をグローバルに有効にする場合も、データベースごとに有効にする場合も、以下の手順を実行する必要があります。

  1. LDAP サーバーで以下を実行します。

    1. ユーザーに割り当てたい Virtual DataPort ロールごとにノードを作成します。

    2. これらのノードごとに、ノードが表すロールの名前を保存する属性を作成します。この属性の名前は、これらのすべてのノードで同じでなければなりません。

      注釈

      実行時に、ユーザーが LDAP 認証を使用してデータベースに接続しようとすると、サーバーはユーザーに割り当てられたロールの名前を LDAP サーバーから取得します。LDAP サーバーから取得されたロール名のうち、Virtual DataPort に存在しないものは無視されます。ロール名を比較する場合、サーバーの「識別子の文字セット」に応じて、大文字と小文字が区別されるかどうかが決まります ([Administration] メニュー > [Server configuration] の [Identifiers charset] タブ)。「Identifiers charset」が「Restricted」の場合、比較時に大文字と小文字が区別されません。「Identifiers charset」が「Unicode」の場合、比較時に大文字と小文字が区別されます。

    3. これらのノードのそれぞれで、このロールを持つユーザーの識別名を値とする属性を作成します。つまりロールのノードは同じ名前の N 個の属性を持ち、各属性の値がユーザーの識別名である必要があります。

    Virtual DataPort では serveradmin という特別なロールを定義します。このロールが割り当てられると、Virtual DataPort サーバーの管理者ユーザーとしての権限が付与されます。ただし、JMX 経由で Virtual DataPort に接続することはできません。

    serveradmin ロールをユーザーに付与する場合は、このロールに対して上記の手順を実行します。

  1. ユーザーの資格情報をチェックするために使用する LDAP サーバーに接続する LDAP データソースを作成します (LDAP データソースの作成方法については、「 LDAP ソース 」のセクションを参照してください)。

    注釈

    組織がマルチドメイン環境を採用している場合、LDAP データソースで [Use GSSAPI SASL authentication mechanism] チェックボックスをチェックする必要があります。

    また、LDAP サーバー (通常は Active Directory) の管理者は、ドメイン間の信頼関係を確立して、すべてのドメインからユーザーを認証できるようにする必要があります。

  2. Virtual DataPort でロールを作成し (「 ロールの作成 」のセクションを参照)、ロールに権限を割り当てます。

    これらのロールの名前は、ユーザーの認証時に LDAP サーバーから取得する名前と一致している必要があります。

    [Import Roles from LDAP] ウィザード ウィザードを使用すると、LDAP サーバーで定義されたすべてのロールを Virtual DataPort で簡単に作成できます。ただし、インポートされたロールに権限を割り当てる必要があることに変わりはありません。このウィザードの使用方法については、「 ロールの作成 」のセクションを参照してください。

    ユーザーにロール「serveradmin」、「assignprivileges」、または デフォルトロール のいずれかを付与する場合に、グループをそれらと同じ名前で Active Directory に作成して、そのグループにユーザーを追加することはできません。

    たとえば、Active Directory に「serveradmin」というグループを作成し、このグループにユーザーを追加した場合、このユーザーが Virtual DataPort にログインすると、ユーザーにはこのロールがありません。これは、ユーザーがログインしたときに、Active Directory で割り当てられた、「デフォルトロール」と同じ名前のグループを Virtual DataPort が無視するためです。

    この動作は、Denodo の管理者のみがユーザーに管理権限を付与するようにするためです。そうしなければ、Active Directory の管理者が、Denodo の管理者の承認を得ずに、ユーザーに対して特別な権限を付与する可能性があります。

Virtual DataPort サーバーに対するグローバル LDAP 認証の有効化

Virtual DataPort でグローバル LDAP 認証を設定するには、Administration Tool に管理者ユーザーとしてログインし、[Administration*] メニュー > [Server configuration] > [Server authentication] をクリックし、[LDAP] タブをクリックします。

Enabling Global LDAP Authentication

グローバル LDAP 認証の有効化

以下のデータを指定する必要があります。

  • Database: LDAP データソースを作成した Virtual DataPort のデータベースを選択します。

  • LDAP data source: データソースを選択します。

  • User base: ユーザーを表すノードを検索するためのスコープとして使用する LDAP サーバーのノード。

    [User base] ボックスの横にある image0 ボタンをクリックすると、複数の「ユーザーベース」を入力することができます。複数の「ユーザーベース」が存在する場合、サーバーは最初の「ユーザーベース」スコープ内でユーザーのノードを検索します。ユーザーを表すノードが見つからなければ、2 番目の「ユーザーベース」スコープで検索します。それでも見つからなければ、3 番目のスコープを検索します (以降同様)。サーバーがユーザーを表すノードを見つけられなかった場合は、そのユーザーへのアクセスが拒否されます。

  • Attribute with user name: ユーザーを表すノード内の、ユーザーのユーザー名を含む属性の名前。

  • User search pattern: サーバーに接続しようとしているユーザーを表すノードを取得するために実行される LDAP クエリの生成に使用されるパターン。

  • Role base: このデータベースのユーザーが持つことのできるロールを表すノードを検索するためのスコープとして使用される LDAP サーバーのノード。

    [Role base] ボックスの横にある image0 ボタンをクリックすると、複数の「ロールベース」を入力することができます。「ロール検索」パターンで形成された LDAP クエリは、「ロールベース」スコープごとに実行されます。

  • Attribute with role name: ロールを表すノード内の、ロールの名前を含む属性の名前。

  • Role search pattern: ユーザーのロールを表すノードを取得するために実行される LDAP クエリの生成に使用されるパターン。このパターンには、トークン @{USERDN} または @{USERLOGIN} を含める必要があります (両方を含めることはできません)。

    • @{USERDN} は、このデータベースに接続しようとしているユーザーの識別名に置換されます (例: CN=john,CN=Users,DC=acme,DC=loc)。

    • @{USERLOGIN} は、このデータベースに接続しようとしているユーザーのログイン名に置換されます (例: john)。

  • Assign "allusers" role for every connected user: 選択すると、サーバーは正常にログインしたすべてのユーザーにロール「allusers」の権限を付与します。このロールが LDAP サーバーのユーザーに割り当てられていない場合も同様です。

    たとえば、特定のデータベースに対する読み取りアクセス権をすべてのユーザーに付与したい場合は、このオプションを選択し、この権限を「allusers」ロールに割り当てます。

    このオプションを選択しても、LDAP サーバー内のユーザーに付与されたロールが変更されることはありません。つまり、後からこのチェックボックスのチェックをはずすと、ログインしているユーザーは「allusers」ロールで付与される権限を持たなくなります。

これらの変更を適用するために再起動する必要はありません。


ドメインの付いたログイン名 (「jsmith@contoso.com」など) で Virtual DataPort にログインするユーザーがいる場合、次のコマンドを実行し、Virtual DataPort を再起動し変更を適用します。

SET 'com.denodo.vdb.security.UserManager.UseLDAPDomainName' = 'true';

これは、サーバーではなく特定のデータベースで LDAP 認証を有効にする場合にも当てはまります。

注釈

LDAP データソースで [Use GSSAPI SASL authentication mechanism] を選択した場合、ドメインの付いたログイン名を使用するユーザーがいない場合でも、このコマンドを実行します。

Virtual DataPort データベースに対する LDAP 認証の有効化

Virtual DataPort では、データベースに対する LDAP 認証を使用できます。既存のデータベースに対して LDAP 認証を有効にしたり、LDAP 認証を使用する新しいデータベースを作成したりできます。どちらの処理も似ています。最初に Virtual DataPort Administration Tool を開き、[Administration] メニューで [Database management] をクリックします。次に、既存のデータベースに対して LDAP 認証を有効にするために、そのデータベースを選択して [Edit] をクリックします。LDAP 認証を使用するデータベースを作成する場合は、[New] をクリックします。

Creating a new database with LDAP authentication

LDAP 認証を使用する新規データベースの作成

以下のデータを指定する必要があります。

  • Name: データベースの名前。

  • Description: データベースの説明 (オプション)。

  • Identifiers charset: [Default] を選択した場合、データベースではサーバー全体に対して構成された設定が使用されます (「 ID の文字セット」のセクションを参照)。『VQL ガイド』の「 エレメント名 (識別子) 」のセクションでは、 RestrictedUnicode 文字セットの違いを詳しく説明しています。

  • 認証タイプ: LDAP

  • Virtual DataPort サーバーに対するグローバル LDAP 認証の有効化 」のセクションでは、フォームの以下のフィールドの意味を説明しています。

  • Use data source credentials to obtain user roles: ユーザーが LDAP 認証を使用してデータベースに接続しようとすると、サーバーはユーザーが入力したパスワードを検証し、LDAP クエリを実行して、ユーザーのロールを取得します。

    このチェックボックスがチェックされている場合、サーバーは、このダイアログの「LDAP データソース」リストで選択された LDAP データソースの資格情報を使用して、この LDAP クエリを実行します。

    このチェックボックスのチェックがはずされている場合、このデータベースに接続しようとしているユーザーの資格情報を使用して LDAP クエリが実行されます。

LDAP 認証プロセス

このセクションでは、Virtual DataPort がデータベースに接続するユーザーを LDAP 認証を使用して認証する方法について説明します。

以下の説明は、ユーザーが Kerberos 認証を使用してサーバーに接続する場合や、SAML 認証を使用して Web サービスに接続する場合にも当てはまります。

たとえば、LDAP 認証を使用するデータベースを作成し、ユーザー「john」がこのデータベースへの接続を試みるとします。

  1. サーバーは、ユーザー「john」を表すノードを取得する LDAP クエリを実行します。この LDAP クエリは、「ユーザーベース」スコープ内の「ユーザー検索パターン」を使用して、「Attribute with user name」属性の値が、ユーザー (この場合「john」) が指定したユーザー名であるノードを検索します。クエリからノードが返されず、複数の「ユーザーベース」が存在する場合、サーバーは同じ検索を 2 番目の「ユーザーベース」で実行します。そこでノードが見つからない場合は、3 番目の「ユーザーベース」を使用します (以降同様)。ノードが見つからなかった場合、サーバーはそのユーザーへのアクセスを拒否します。

    これらのクエリを実行するために、サーバーはデータソースの資格情報を使用して LDAP サーバーに接続します。

  2. ユーザーの LDAP ノードを取得後、サーバーはこのノードの識別名 (DN) とユーザーが入力したパスワードを使用して、LDAP サーバーへのログインを試みます。パスワードが LDAP サーバーによって拒否されると、サーバーはユーザーへのアクセスを拒否します。

    ユーザーが Kerberos 認証を使用してサーバーに接続した場合や、SAML 認証を使用して Web サービスに接続した場合、この手順は省略されます。この時点でユーザーの資格情報はすでに検証されており、このプロセスはユーザーに割り当てられたロールを取得するためのものだからです。

  3. ユーザーの資格情報が正しい場合、サーバーはユーザーのロールを取得します。そのために、サーバーは LDAP クエリを実行します。クエリは、「ロール検索パターン」のトークン @{USERDN} または @{USERLOGIN} を置換して作成されます。

    この例では、パターンには「@{USERDN}」トークンがあり、このトークンはユーザーの LDAP ノードの識別名に置換されます。その結果、次のようなクエリが作成されます: (&(member=CN=john,CN=Users,DC=acme,DC=loc)(objectClass=group))

    ユーザーのロールを表すノードを取得するために、サーバーは「ロールベース」スコープでこの LDAP クエリを実行します。複数の「ロールベース」がある場合、LDAP クエリはすべての「ロールベース」スコープから実行され、結果は各クエリの結果をまとめたものになります。

    [Use data source credentials to obtain user roles] チェックボックスがチェックされている場合、サーバーは、データベースに関連付けられている LDAP データソースの資格情報を使用して、この LDAP クエリを実行します。チェックボックスのチェックがはずされている場合は、このデータベースに接続しようとしているユーザーの資格情報を使用して、クエリが実行されます。ユーザーが Kerberos 認証を使用してサーバーに接続した場合や、SAML 認証を使用して Web サービスに接続した場合も、サーバーは LDAP データソースの資格情報を使用して、この LDAP クエリを実行します。

  4. ロールのノードを取得後、サーバーは別の LDAP クエリを実行して、ユーザーに割り当てられているロールの名前を、これらのノードの「Attribute with Role name」属性から取得します。

    データベースの構成の [Use data source credentials to obtain user roles] チェックボックスがチェックされている場合、サーバーはデータソースの資格情報を使用して、このクエリを実行します。このチェックボックスのチェックがはずされている場合は、このデータベースに接続しようとしているユーザーの資格情報を使用して、この LDAP クエリが実行されます。ユーザーが Kerberos 認証を使用してサーバーに接続した場合や、SAML 認証を使用して Web サービスに接続した場合も、サーバーは LDAP データソースの資格情報を使用して、この LDAP クエリを実行します。

    注釈

    LDAP サーバーから取得されたロール名が Virtual DataPort に存在しない場合、そのロール名は無視され、ユーザーは存在する他のロールの権限を持つことになります。Virtual DataPort にロール名が存在するかどうかを検索するための比較では、大文字と小文字は区別されません。LDAP サーバーから取得されたロール名が一つも Virtual DataPort に存在しない場合、「一般」ユーザーはこのデータベースに接続できません (「管理者」ユーザーは、こうした認証を回避できるため、このデータベースに接続できます)。

注釈

認証プロセスの最初のステップでは、サーバーは LDAP サーバーに接続してユーザーのノードを検索します。そのためには、以下のことを行う必要があります。

  • 有効な「ログイン情報」と「パスワード」を使用して「LDAP データソース」を構成します。これにより LDAP データソースは LDAP サーバーに接続して適切なノードを検索できるようになります。

  • または、匿名クエリを許可するように LDAP サーバーを構成します。

実際の環境でこれらのいずれもが不可能な場合は、以下の手順に従って、認証プロセスの最初の手順を省略することができます。ただし、この場合、ユーザー名を保存する LDAP ノードの属性は「cn」でなければなりません。

  1. [Attribute with role name] に「cn」と入力します。

  2. [User search pattern] に何も入力されておらず、[Attribute with role name] が「cn」の場合、[User base] の値がユーザーの識別名を作成するために使用されます。

    この例では、ユーザー「john」が「ユーザーパターン」 CN=Users,DC=acme,DC=loc でデータベースへの接続を試みる場合、LDAP サーバーへの接続に使用される識別名は CN=john,CN=Users,DC=acme,DC=loc になります。サーバーは、この文字列 (識別名) とユーザーが入力したパスワードを使用して、LDAP サーバーへの接続を試みます。接続に成功した場合、ユーザーが入力したパスワードは正しかったということです。

付録「 Active Directory または他の LDAP サーバーの問題のデバッグに役立つツール 」には、Active Directory および他の LDAP サーバーに関連する問題をデバッグするのに便利なツールの一覧が記載されています。

LDAP 認証と動的グループを使用するデータベースの構成

一部の LDAP サービスでは、グループのメンバーを 2 つの方法 (静的または動的) で定義します。

  • 静的グループ: メンバーオブジェクトを明示的に列挙します。

  • 動的グループ: メンバーを列挙するのではなく、グループメンバーに対してのみ一致する LDAP URL を定義します。動的グループでは、メンバーは共通の属性または memberURL フィルタで定義された属性のセットを共有します。

ユーザーが LDAP 認証を使用するデータベースに接続すると、サーバーはそのユーザーのロールを確認するために、そのユーザーが所属するグループを取得します。

デフォルトでは、Virtual DataPort は静的グループのみをサポートします。このセクションでは、LDAP 動的グループと連携できるように Virtual DataPort を構成する方法を説明します。

LDAP 認証を使用するすべてのデータベースを動的グループと連携させるか、一部のデータベースのみを連携させるかによって、いくつかの異なる方法で構成することができます。LDAP で認証されたデータベースは、静的グループまたは動的グループのいずれかと連携できます。両方のグループと連携することはできません。


オプション 1: LDAP 認証されたすべてのデータベースが、静的グループではなく動的グループと連携します

Administration Tool の VQL シェルで以下のステートメントを実行します。

SET 'com.denodo.vdb.security.LDAPUserGroupRetriever.instanceClassName'
    = 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever';

SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.memberURL'
    = '<member URL>';

SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.userMatchPattern'
    = '<LDAP filter>';

2 番目のステートメントの <memberURL> は、ユーザーの動的グループの取得に使用される LDAP URL を含む属性です。

3 番目のステートメントの <LDAP filter> は、LDAP ユーザーが Virtual DataPort に接続しようとしているユーザーと同じ場合に一致するフィルタです (このプロパティには通常、 @{USERLOGIN} 変数と @{USERDN} 変数が含まれます)。

<member URL> の例: memberURL

<LDAP filter> の例: &(uid=@{USERLOGIN})


オプション 2: LDAP 認証されたすべてのデータベースが、1 つを除く動的グループと連携します

VQL シェルで以下のステートメントを実行します。

# This statement makes the database <databaseName> work with static
# groups.
SET 'com.denodo.vdb.security.LDAPUserGroupRetriever.instanceClassName[.<databaseName>]' =
    'DefaultLDAPUserGroupRetriever';

SET 'com.denodo.vdb.security.LDAPUserGroupRetriever.instanceClassName'
    = 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever';

SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.memberURL'
    = '<member URL>';

SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.userMatchPattern'
    = '<LDAP filter>';

最初のステートメント <databasename> は、静的グループに属するユーザーを認証する LDAP 認証されたデータベースの名前です。他のデータベースは動的グループのユーザーを認証します。

オプション 3: 1 つ以上の LDAP 認証されたデータベースが、動的グループと連携します。他の LDAP 認証されたデータベースは静的グループと連携します

VQL シェルで以下のステートメントを実行します。動的グループを使用するデータベースごとに、これらのステートメントを実行します。

SET 'com.denodo.vdb.security.LDAPUserGroupRetriever.instanceClassName[.<databaseName>]'
    = 'DynamicLDAPUserGroupRetriever';

SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.<databaseName>.memberURL'
    = '<member URL>';

SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.<databaseName>.userMatchPattern'
    = '<LDAP filter>';

ユーザーが LDAP 認証されたデータベースに接続するたびに、サーバーは LDAP クエリを実行して、ユーザーが所属するグループを取得します。データベースが動的グループと連携するように構成されている場合、サーバーは静的グループと連携している場合よりも多くの LDAP 検索を実行します。これは、動的グループと連携する場合、サーバーはグループごとに追加の LDAP 検索を開始するためです。多くのグループがあると、サーバーはユーザーがそのデータベースに接続するたびに多くの LDAP 検索を実行します。


動的グループの設定例

以下の手順に従い、動的グループを使用してユーザーを認証する、「dynamicdb」というデータベースを作成します。

  1. VQL シェルで以下のステートメントを実行します。

    SET 'com.denodo.vdb.security.LDAPUserGroupRetriever.instanceClassName'
        = 'com.denodo.vdb.security.DefaultLDAPUserGroupRetriever';
    
    SET 'com.denodo.vdb.security.LDAPUserGroupRetriever.instanceClassName.dynamicdb'
        = 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever';
    
    SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.dynamicdb.memberURL'
        = 'memberURL';
    
    SET 'com.denodo.vdb.security.DynamicLDAPUserGroupRetriever.dynamicdb.userMatchPattern'
        = '(&(uid=@{USERLOGIN}))';
    
  2. サーバーを再起動し、以下のステートメントを使用してデータベースを作成します。

    CREATE OR REPLACE DATABASE dynamicdb
      'Description: LDAP-Authenticated database (dynamic groups)'
      AUTHENTICATION LDAP admin.ldapds_bertone
      USERBASE = 'ou=users,dc=denodo,dc=com'
      USERATTRIBUTENAME = 'uid'
      USERSEARCH = '(objectClass=person)'
      ROLEBASE = 'dc=denodo,dc=com'
      ROLEATTRIBUTENAME = 'cn'
      ROLESEARCH = '(objectClass=groupOfURLs)';