この章では、リモートに格納されているデータへのアクセスを構成する方法について説明します(RDBMSに格納されているアイデンティティ・データにアクセスする方法、およびプロキシ・インスタンスと1つ以上のリモートLDAPサーバーとの通信を構成する方法を含みます)。
この章の構成は、次のとおりです。
この項では、Oracle DatabaseにLDAPエントリとして格納されているアイデンティティ・データを公開するOracle Unified Directoryプロキシ・インスタンスに基づいて、サンプルの仮想構成を作成するユースケースについて説明します。
この項の例では、RDBMSワークフロー要素とそのサポートしているコンポーネントを構成して、アイデンティティ・データのこの仮想ビューを作成します。RDBMSワークフロー要素を使用すると、LDAPクライアントはLDAPプロトコルを使用してアイデンティティ・データにアクセスできます。
このセクションには次のトピックが含まれます:
RDBMSワークフロー要素の概要は、第12.1.1項「LDAPクライアントからRDBMSに格納されているアイデンティティ・データへのアクセスの有効化」を参照してください。
注意: この項の例では、dsconfig コマンドを使用して、RDBMSワークフロー要素および他の必須コンポーネントを作成および構成します。これらの例の説明は、設定する必要がある主要オプションおよびプロパティを対象としています。
すべての |
このユースケースのデプロイメントには、次のコンポーネントが含まれています。
このユースケースでは、LDAPクライアントはLDAPプロトコルを使用してOracle Database (RDBMS)のアイデンティティ・データにアクセスするとします。これらのクライアントは、このデータへのアクセスにSQL問合せは実行しません。
このユースケースには、LDAPクライアントとOracle Databaseの間のインタフェースとして、Oracle Unified Directoryプロキシ・サーバーが必要です。
プロキシ・サーバーはOracle Databaseにdbuser
として接続します。ユースケース例でLDAP検索が実行されるため、dbuser
には、Oracle DatabaseのPERSON
およびPHONE
SQL表に対する読取り権限が必要です。dbuser
がLDAPプロトコルを使用してアイデンティティ・データを作成または更新する場合も、追加の権限が必要です。
Oracle Unified Directoryプロキシは、次のコンポーネントを使用してOracle Databaseと通信します。
RDBMS拡張は、リモート・ピアからのレスポンスを定期的に確認し、接続プールで保持されている有効な接続を提供することによって、JDBCを使用したリモートのOracle Databaseとの接続性を管理します。
RDBMSワークフロー要素は、RDBMS拡張要素から接続を取得し、LDAPエントリとSQL表とのマッピングを実行し、LDAPクライアントから受け取った操作を実行します。
RDBMSエントリのRDBMSワークフローは、RDBMSワークフロー要素によって処理されるネーミング・コンテキストを公開します。
RDBMSワークフローのアクセス制御グループでは、仮想ACIを使用して仮想アイデンティティ・データへのアクセスを制御します。
詳細は、第20.1.3項「RDBMSと通信するためのコンポーネントの作成」を参照してください。
このユースケースのRDBMSは、インストールされて実行中の、デプロイメントのアイデンティティ・データが移入されている11g Oracle Databaseです。このデータベースには、次のSQL表のユーザー・アカウントに関する情報が含まれます。
PERSON
表には、従業員ID、名、姓、パスワード、従業員番号、雇用日などのユーザー・データが含まれます。
PHONE
表はPERSON
表にリンクされており、従業員の電話番号が含まれます。
これらの表の詳細は、第20.1.3.6.1項「PERSON
表およびPHONE
表の理解」を参照してください。
このデータベースには次の特性もあります。
データベースのシステム識別子(SID): orcl
データベースURL: myhost.example.com:1521:orcl
プロキシからデータベースに接続するデータベース・ユーザー: dbuser
データベース・ユーザー・パスワード: dbuser-password
RDBMSワークフロー要素とそのサポートしているコンポーネントの構成を開始する前に、次の必要な事前タスクを実行します。
このユースケースには、LDAPクライアントとOracle Database (アイデンティティ・データを含む)の間のインタフェースとして、Oracle Unified Directoryプロキシ・サーバーが必要です。
UNIXシステムまたはLinuxシステムでコマンド行ツールを使用してプロキシ・サーバー・インスタンスを設定するには、次のようにします。
JAVA_HOME
環境変数が、サポートされているJVMインストール(JRE 7またはJDK 7)に設定されていることを確認します。
次のoud-proxy-setup
スクリプトを実行し、プロキシ・サーバー・インスタンスを設定します。
$ export INSTANCE_NAME=db-oud-proxy-instance $ OUD_HOME/oud-proxy-setup --cli -p oud-port --adminConnectorPort admin-port -D "cn=Directory Manager" -j password-file
この例の説明は、次のとおりです。
db-oud-proxy-instance
は、プロキシ・インスタンス・ディレクトリ名です。この例では、oud-proxy-setup
スクリプトを実行する前に、INSTANCE_NAME
環境変数をこのディレクトリに設定します。
oud-port
は、プロキシ・サーバー・インスタンスへのアクセスに使用されるLDAPポートです。
admin-port
は管理ポートです。
password-file
には管理者パスワードが含まれます。
Windowsシステムの場合、oud-proxy-setup.bat
スクリプトを実行します。
詳細は、Oracle Unified DirectoryのインストールのOracle Unified Directoryのプロキシ・サーバーとしての設定に関する項を参照してください。
Oracle Unified DirectoryのRDBMS実装は、基礎となるRDBMSと通信するJDBC標準に依存します。そのため、使用しているRDBMSに対応するJDBCドライバのJARファイルをインストールする必要があります。
JDBCドライバのJARファイルをインストールするには、次のようにします。
使用しているRDBMSデータベース・リリースに対応するJDBCドライバをダウンロードします。このユースケースではOracle Database 11gにデータが格納されているため、次の場所からojdbc6.jar
をダウンロードします。
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
Oracle Database 11gの場合はojdbc6.jar
、Oracle Database 12cの場合はojdbc7.jar
を使用します。
ステップ1のJARファイルを次のディレクトリにコピーします。
OUD_INSTANCE_NAME/OUD/lib
Oracle Unified Directoryインスタンスを再起動します。たとえば、UNIXシステムおよびLinuxシステムでは次のように指定します。
$ OUD_INSTANCE_NAME/OUD/bin/stop-ds $ OUD_INSTANCE_NAME/OUD/bin/start-ds
Windowsシステムの場合、OUD_INSTANCE_NAME
\OUD\bat
ディレクトリのstop-ds.bat
およびstart-ds.bat
を使用します。
RDBMSと通信するOracle Unified Directoryプロキシに必要なコンポーネントを作成するには、次の各項で説明するタスクを実行します。
RDBMS拡張は1つのRDBMSインスタンスに対応します。このユースケースでは、Oracle Databaseインスタンスを1つのみ使用します。
ORCL1
というRDBMS拡張を作成するには、次のdsconfig create-extension
コマンドを使用します。
$ dsconfig create-extension \
--type rdbms \
--extension-name ORCL1 \
--set jdbc-driver-class:oracle.jdbc.driver.OracleDriver \
--set jdbc-url:"jdbc:oracle:thin:@myhost.example.com:1521:orcl" \
--set target-database:oracle11 \
--set rdbms-username:dbuser \
--set rdbms-password:dbuser-password \
--set enabled:true
この例の説明は、次のとおりです。
type
は、RDBMS拡張を指定するrdbms
にする必要があります。
extension-name
は、新規拡張の名前をORCL1
と指定します。
jdbc-driver-class
およびjdbc-url
は、特定のRDBMSインスタンスに対応します。
URLはRDBMSが実行中のホストおよびポートによって異なります。構造も使用している特定のRDBMSによって異なります。この例では、11g Oracle Databaseにこれらのプロパティを設定します。他のデータベースの場合は、使用しているJDBCドライバのドキュメントを参照してください。
target-database
は、使用しているRDBMSのタイプを指定します。11g (および12g) Oracle Databaseの場合は、oracle11
を指定します。
rdbms-username
プロパティおよびrdbms-password
プロパティは、SQL問合せの実行に使用する資格証明を指定します。
すべてのSQL問合せは、元のLDAPクライアント・アイデンティティを考慮せずに、これらの資格証明を使用して実行されます。LDAPクライアント・アイデンティティに基づいたRDBMS SQLデータへのアクセス制限に使用される仮想ACIは、後で構成します。
すべてのRDBMS拡張プロパティの詳細は、Oracle Fusion Middleware Oracle Unified Directory構成リファレンスを参照してください。
使用している各RDBMS拡張にRDBMSワークフロー要素を作成する必要があります。RDBMSワークフロー要素を作成する前に、RDBMS拡張も構成しておく必要があります。
前の項で作成したRDBMS拡張に関連付けられるRDBMSワークフロー要素を作成するには、次のdsconfig create-workflow-element
コマンドを使用します。
$ dsconfig create-workflow-element \ --type rdbms \ --element-name ORCL1 \ --set rdbms-extension:ORCL1 \ --set suffix:o=db \ --set enabled:true
この例の説明は、次のとおりです。
type
は、RDBMSワークフロー要素を指定するrdbms
にする必要があります。
element-name
は、新規RDBMSワークフロー要素の名前をORCL1
と指定します。
rdbms-extension
は、このワークフロー要素に関連付けられる拡張の名前をORCL1
と指定します。
suffix
は、接尾辞DNをo=db
と指定し、このワークフロー要素で格納および公開されるすべてのエントリのDNとなります。
すべてのRDBMSワークフロー要素のプロパティの詳細は、Oracle Fusion Middleware Oracle Unified Directory構成リファレンスを参照してください。
RDBMSワークフロー要素によって処理されるネーミング・コンテキストを公開するワークフローを作成する必要があります。このワークフローは、ネーミング・コンテキスト(ベースDN)、およびOracle Unified Directoryによる着信リクエストの処理方法を定義するワークフロー要素によって定義されます。
前に作成したRDBMSワークフロー要素に関連付けられるワークフローを作成するには、次のdsconfig create-workflow
コマンドを使用します。
$ dsconfig create-workflow \ --workflow-name db \ --set base-dn:o=db \ --set workflow-element:ORCL1 \ --type generic \ --set enabled:true
この例の説明は、次のとおりです。
workflow-name
は、この構成オブジェクトの名前をdb
と指定します。
base-dn
は、このワークフローに関連付けられる接尾辞をo=db
と指定します。この接尾辞は、ORCL1
というRDBMSワークフロー要素によって公開されるsuffix
と同じである必要があります。
workflow-element
は、RDBMSワークフロー要素をORCL1
と指定します。
すべてのワークフロー・プロパティの詳細は、Oracle Fusion Middleware Oracle Unified Directory構成リファレンスを参照してください。
RDBMSワークフローは、このワークフローで処理される操作に適用されるACIのリストを定義するアクセス制御グループに関連付けられます。
Oracle Databaseからのデータの仮想ディレクトリ・ビューへのアクセスを制御するには、仮想ACIを有効化および作成する必要があります。Oracle Unified Directoryが仮想ディレクトリ・データ・ビューに対するリクエストを受信すると、仮想ACIおよびユーザーにより提供された認証情報を使用して、リクエストされたデータへのアクセスを許可または拒否します。
RDBMSワークフローのアクセス制御グループを作成するには、次のようにします。
次のdsconfig create-access-control-group
コマンドを使用して、orcl1
というアクセス制御グループを作成します。
$ dsconfig create-access-control-group \ --group-name orcl1
デフォルトでは、新しいアクセス制御グループorcl1
は空のため、構成のこの時点の仮想エントリは、Oracle Unified Directory管理者にのみ公開されます。
次のdsconfig set-workflow-prop
コマンドを使用して、前のステップで作成したアクセス制御グループをRDBMSワークフロー要素に関連付けます。
$ dsconfig set-workflow-prop \ --workflow-name db \ --set virtual-aci-mode:true \ --set access-control-group:orcl1
この例の説明は、次のとおりです。
workflow-name
は、db
というワークフローがorcl1
というアクセス制御グループに格納されている仮想ACIによって保護されることを指定します。
virtual-aci-mode
がtrue
に設定されているため、ACI属性を処理するすべての操作がこの属性を仮想ACIとして管理します。この属性はユーザー・データと一緒には格納されていません。これは、Oracle Unified Directoryプロキシ・インスタンスの特定のディレクトリ情報ツリー(DIT)の場所"cn=virtual acis"
に格納されます。
ネットワーク・グループは、Oracle Unified Directoryに対するクライアント・リクエストの単一のエントリ・ポイントです。ワークフローは、少なくとも1つのネットワーク・グループに登録される必要がありますが、複数のネットワーク・グループにアタッチできます。
db
ワークフローをデフォルトのネットワーク・グループ(network-group
)に割り当てるには、次のdsconfig set-network-group-prop
コマンドを使用します。
$ dsconfig set-network-group-prop \ --group-name network-group \ --set workflow:db
Oracle Unified Directoryプロキシに問い合せて、Oracle Databaseのコンテンツを取得できるようになりました。デフォルトでは、LDAP-SQLマッピングがまだ構成されていないため、RDBMSワークフロー要素によって公開されるネーミング・コンテキストのベースに対応するダミー・エントリが返されます。
構成を確認するには、次のldapsearch
コマンドを使用します。
$ ldapsearch –p oud-port -D "cn=directory manager" -w admin-password -b o=db objectclass=* dn : o=db o : db objectclass : organization objectclass :top
LDAP属性を、Oracle DatabaseのSQL PERSON
表およびPHONE
表の適切な列にマップする必要があります。
このユースケースのLDAP-SQLマッピングを構成するには、次の項で説明するタスクを実行します。
PERSON
表およびPHONE
表の理解このユースケースでは、Oracle Databaseで2つのSQL表(ユーザー・データを格納するPERSON
表、ユーザーの電話番号を格納するPHONE
表)が公開されます。
LDAPエントリは、これら表のSQL行および列にマップされます。1つのLDAPエントリ(sqlPerson
オブジェクト・クラス)は、PERSON
表の各行に対応します。PHONE
表の行は、対応する人エントリの複数値LDAP telephoneNumber
属性に表示されます。
これらのSQL表を作成する同等のSQLコマンドは次のとおりです。
CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRST_NAME VARCHAR(40), LAST_NAME VARCHAR(40), PASSWORD VARCHAR(10), EMPLOYEE_ID VARCHAR(40), EMPLOYEE_NUMBER INT, HIRE_DATE date) CREATE TABLE PHONE (PERSON_ID INT, PHONE_NUMBER VARCHAR(17), FOREIGN KEY(PERSON_ID) REFERENCES PERSON(ID) ON DELETE CASCADE, PRIMARY KEY(PERSON_ID, PHONE_NUMBER))
このユースケースでは、PERSON
表の主キーはRDBMSによって自動的に生成され、管理されないか、LDAPクライアントに公開されません。LDAPエントリはRDBMSから仮想化されるため、LDAPクライアント・アプリケーションに対して透過的である必要があるため、この構成は一般的です。
Oracle Databaseでは、主キーの自動増分はデータベース順序およびトリガーの概念に依存します。次のSQLコマンドでは、PERSON
表の順序を作成し、主キーを自動的に生成するトリガーを構成します。
CREATE SEQUENCE PERSON_SEQUENCE START WITH 1 INCREMENT BY 1 CREATE OR REPLACE TRIGGER PERSON_TRIGGER BEFORE INSERT ON PERSON REFERENCING NEW AS NEW FOR EACH ROW BEGIN SELECT PERSON_SEQUENCE.nextval INTO :NEW.ID FROM dual; END;
LDAP属性として公開される行を含む、RDBMSのSQL表ごとにRDBMS表オブジェクトを作成し、これらの表をRDBMSワークフロー要素に関連付ける必要があります。
このユースケースのRDBMS表を作成するには、次のdsconfig create-rdbms-table
コマンドを使用します。
Oracle DatabaseのSQL PERSON
表に対応するPERSON
というRDBMS表を作成し、この表をORCL1
というRDBMSワークフロー要素に関連付けます。
$ dsconfig create-rdbms-table \ --set db-table-name:PERSON \ --table-name PERSON \ --element-name ORCL1 \ --set primary-key-field:ID \ --set primary-key-storability:false \ --set db-sequence-name:PERSON_SEQUENCE \ --type generic
この例の説明は、次のとおりです。
table-name
は、表構成オブジェクトの名前を指定します。
db-table-name
は、対応するSQL表の名前を指定します。
element-name
は、この表が関連付けられるRDBMSワークフロー要素の名前を指定します。
primary-keyfield
は、SQL主キーに対応するSQL列を指定します。
primary-key-storability
は、この表の主キーにユーザーが指定した値が含まれているかどうかを指定します。true
に設定された場合、エンドユーザーはこの列にキー値を挿入できます。
このユースケースでは、自動生成された主キーを使用するため、primary-key-storability
はfalse
に設定されています。ほとんどのデプロイメントでは、LDAPクライアントに対してキー管理を透過的にする必要があるため、キーは行が挿入されるときにRDBMSによって自動的に生成されます。
db-sequence-name
は、データベース順序がトリガーとともに使用されるときに主キー・フィールド値を生成するデータベース順序を指定します。このケースはOracle Databaseの場合です。
Oracle DatabaseのSQL PHONE
表に対応するPHONE
というRDBMS表を作成し、この表をORCL1
というRDBMSワークフロー要素に関連付けます。
$ dsconfig create-rdbms-table \ --table-name PHONE \ --element-name ORCL1 \ --set db-table-name:PHONE \ --set primary-key-field:PERSON_ID \ --set primary-key-field:PHONE_NUMBER \ --set cascade-delete-on-relation:true \ --set join-type:many-to-one \ --set join-rule:PHONE.PERSON_ID=PERSON.ID \ --type generic
すべてのRDBMS表プロパティの詳細は、Oracle Fusion Middleware Oracle Unified Directory構成リファレンスを参照してください。
オブジェクト・クラス・マッピングの構成オブジェクトは、SQL表のコンテンツから作成したLDAPオブジェクトに対応するLDAPオブジェクト・クラスの名前を指定します。オブジェクト・クラスがサーバー・スキーマに定義されていない場合、サーバーの起動時にサーバー・スキーマに自動的に追加されます。
RDBMSワークフロー要素にsqlPerson
オブジェクト・クラスのオブジェクト・クラス・マッピングを作成するには、次のdsconfig create-objectclass-mapping
コマンドを使用します。
$ dsconfig create-objectclass-mapping \ --mapping-name sqlPerson \ --element-name ORCL1 \ --set objectclass-name:sqlPerson \ --set rdn-attribute:uid \ --type generic
この例の説明は、次のとおりです。
objectclass-name
は、objectclass
属性で表示されるLDAPオブジェクト・クラスの名前を指定します。
rdn-attribute
は、ネーミング属性として使用されるLDAPオブジェクトとしてuid
を指定します。
このユースケースでは、uid
属性は、次の項で示すように、PERSON
表のEMPLOYEE_ID
列に対応します。
LDAP属性として公開される各SQL行に対して属性マッピング構成オブジェクトを作成する必要があります。このユースケースに必要な属性マッピングを次の表に示します。
LDAP属性 | SQLの表と列 |
---|---|
uid |
PERSON:EMPLOYEE_ID |
lastName |
PERSON:LAST_NAME |
firstName |
PERSON:FIRST_NAME |
employeeNumber |
PERSON:EMPLOYEE_NUMBER |
hireDate |
PERSON:HIRE_DATE |
userPassword |
PERSON:PASSWORD |
telephoneNumber |
PHONE:PHONE_NUMBER |
sqlPerson
オブジェクト・クラスの属性マッピングを作成するには、前の表で示す各属性に対して次のdsconfig create-attribute-mapping
コマンドを使用します。
$ dsconfig create-attribute-mapping \ --attribute-mapping-name employeeID \ --mapping-name sqlPerson \ --set attribute-name:uid \ --set field-name:EMPLOYEE_ID \ --set table-name:PERSON \ --element-name ORCL1 \ --type generic $ dsconfig create-attribute-mapping \ --attribute-mapping-name firstName \ --mapping-name sqlPerson \ --set attribute-name:firstName --set field-name:FIRST_NAME \ --set table-name:PERSON \ --element-name ORCL1 \ --type generic $ dsconfig create-attribute-mapping \ --attribute-mapping-name lastName \ --mapping-name sqlPerson \ --set attribute-name:lastName \ --set field-name:LAST_NAME \ --set table-name:PERSON \ --element-name ORCL1 \ --type generic $ dsconfig create-attribute-mapping \ --attribute-mapping-name employeeNumber \ --mapping-name sqlPerson \ --set attribute-name:employeeNumber \ --set field-name:EMPLOYEE_NUMBER \ --set table-name:PERSON \ --element-name ORCL1 \ --type generic $ dsconfig create-attribute-mapping \ --attribute-mapping-name hireDate \ --mapping-name sqlPerson \ --set attribute-name:hireDate \ --set field-name:HIRE_DATE \ --set table-name:PERSON \ --element-name ORCL1 \ --type generic $ dsconfig create-attribute-mapping \ --attribute-mapping-name telephoneNumber \ --mapping-name sqlPerson \ --set attribute-name:telephoneNumber \ --set field-name:PHONE_NUMBER \ --set table-name:PHONE \ --element-name ORCL1 \ --type generic
これらの例の説明は、次のとおりです。
attribute-mapping-name
は、このコマンドで実行されるマッピングの名前を指定します。
attribute-name
は、指定されたSQL表および列にマップされるLDAP属性を指定します。
mapping-name
は、オブジェクト・クラスを指定します。
field-name
およびtable-name
は、LDAP属性をマップするSQL列および表の名前を指定します。
マッピングのテスト
構成のこの段階で、PERSON
表の各行は、o=db
接尾辞のsqlPerson
のインスタンスとして公開されます。対応するtelephoneNumber
(存在する場合)がPHONE
表から取得されます。
これらのマッピングをテストするには、次の例で示すようにLDAP検索を実行します。
注意: 次のテストはディレクトリ・マネージャとして実行する必要があります。この時点では、RDBMSワークフロー要素のコンテンツに対するアクセス権がACIに付与されていないためです。 |
$ ldapsearch –p oud-port -D "cn=directory manager" -w admin-password -b o=db objectclass=* dn : o=db o : db objectclass : organizationalUnit objectclass :top dn : uid=53422345,o=db objectclass : sqlPerson objectclass :top uid : 53422345 firstName : Joseph lastName : Smith employeeNumber : 172453 hireDate : 199505011220000.000Z telephoneNumber : +33123456789 ...
前の例では、ldapsearch
コマンドによって返された最初のエントリを示しています。マッピングが正しく構成されている場合、定義されたマッピング・ルールに従って、SQL表から作成された仮想LDAPエントリが検索によって返されます。
Oracle Databaseでは、PERSON
表のPASSWORD
列にユーザー・パスワードが格納されます。
LDAPクライアントがOracle Databaseに格納されているパスワードに対して認証することができるように、RDBMSワークフロー要素を構成するには、次のようにします。
次のdsconfig create-attribute-mapping
コマンドを使用して、userPassword
属性の属性マッピングを作成します。
$ dsconfig create-attribute-mapping \ --attribute-mapping-name userPassword \ --mapping-name sqlPerson \ --set attribute-name:userPassword \ --set field-name:PASSWORD \ --set table-name:PERSON \ --element-name ORCL1 \ --type generic
この例の説明は、次のとおりです。
attribute-name
は、マップするLDAP属性としてuserPassword
を指定します。
field-name
およびtable-name
は、マップするSQL列および表の名前を指定します。
element-name
は、ORCL1
RDBMSワークフロー要素を指定します。
ワークフロー要素が認証にuserPassword
属性を使用できるように、次のdsconfig set-workflow-element-prop
コマンドを使用してRDBMSワークフロー要素を構成します。
$ dsconfig set-workflow-element-prop \ --element-name ORCL1 \ --set password-attribute:userpassword \ --set password-storage-scheme:"Salted SHA-512"
この例の説明は、次のとおりです。
password-attribute
は、ユーザー・パスワードを含む属性を指定します。
password-storage-scheme
は、Oracle Databaseにユーザー・パスワードを格納する方法を指定します。
この例では、ユーザー・パスワードは、Salted SHA-512
アルゴリズムを使用してハッシュされ、Oracle Databaseに格納されます。LDAPエントリの場合と異なり、SQL表のハッシュされたパスワード値には、ダイジェスト・アルゴリズム・タグ({SSHA-512}
など)の接頭辞は付きません。
デフォルトでは、「RDBMSワークフローのアクセス制御グループの作成」で作成したorcl1
というアクセス制御グループは空です。データベースの仮想エントリはOracle Unified Directory管理者にのみ公開されます。そのため、次の検索では次のエントリは返されません。
$ ldapsearch –p oud-port -D uid=53422345,o=db -w password -b o=db objectclass=*
次のコマンドは、Oracle Databaseから作成した仮想エントリの所有者に対して完全アクセス権を付与する仮想ACIを作成します。
ldapmodify –p oud-port -D "cn=Directory Manager" –w admin-password dn : o=db changetype : modify add : aci aci : (targetattr= "*") (version 3.0 ; acl "self example" ; allow (all) userdn="ldap:///self" ;)
この新しい仮想ACIを使用して以前の検索を再試行する場合、各ユーザーにはuid
に基づいて自分のエントリに対するアクセス権が付与されます。
ldapsearch –p oud-port -D uid=53422345,o=db -w password -b o=db objectclass=* dn : uid=53422345,o=db objectclass : sqlPerson objectclass :top uid : 53422345 firstName : Audrey lastName : Smith employeeNumber : 172453 hireDate : 199505011220000.000Z telephoneNumber : +33123456789
注意: 使用しているRDBMSのアクセス制御方法はコーポレート・ポリシーによって異なるため、これらのポリシーに準拠する仮想ACIを作成する必要があります。 |
この項では、プロキシ・インスタンスと1つ以上のリモートLDAPサーバーとの通信を構成する方法を説明します。
この項の内容は次のとおりです。
この項では、リモートLDAPサーバーとの通信に必要なLDAPサーバー拡張を構成する方法を説明します。この項の内容は次のとおりです:
特定のプロキシ・インスタンスに構成されているすべてのLDAPサーバー拡張のリストを表示するには、次に示すように、dsconfig list-extensions
コマンドを使用します。
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \ list-extensions
Extension : Type -----------:--------------------- gi-catalog : global-index-catalog proxy1 : ldap-server proxy2 : ldap-server
タイプがldap-server
の拡張が、LDAPサーバー拡張です。リモートLDAPサーバーごとに1つのLDAPサーバー拡張が指定されているはずです。
特定のLDAPサーバー拡張のプロパティを表示するには、次に示すように、dsconfig get-extension-prop
コマンドを使用します:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
get-extension-prop --extension-name proxy1
Property : Value(s)
---------------------------:---------
enabled : true
remote-ldap-server-address : server1.example.com
remote-ldap-server-port : 1389
次のプロパティが表示されます:
enabled
LDAPサーバー拡張が有効になっている(true
)か、それとも有効になっていない(false
)かを示します。
remote-ldap-server-address
and remote-ldap-server-port
リクエストの転送先のリモートLDAPサーバーのアドレスおよびポートを示します。
monitoring-bind-dn
およびmonitoring-bind-password
これらのプロパティは、--advanced
オプションが指定されている場合にのみ表示されます。データ・ソースのモニタリングの実行に拡張で使用される、ユーザーの資格証明が示されます。これらのプロパティがデフォルトから変更されていない場合、これらのプロパティは表示されません。つまりモニタリングは匿名で実行されます。
これらのプロパティを構成するには、第35.5項「LDAPを使用したサーバーのモニタリング」を参照してください。
LDAPサーバー拡張のすべてのプロパティを表示するには、dsconfig --advanced get-extension-prop
コマンドを使用します。例:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
--advanced get-extension-prop --extension-name proxy1
次のようなプロパティが表示されます。
Property Value(s) ---------------------------------------------------------------------- 1) enabled true 2) java-class com.sun.dps.server.workflowelement .proxyldap.LDAPServerExtension 3) monitoring-check-interval 30000 4) monitoring-connect-timeout 5000 5) monitoring-inactivity-timeout 120000 6) monitoring-ping-timeout 5000 7) pool-increment 5 8) pool-initial-size 10 9) pool-max-size 1000 10) pool-max-write 0 11) pool-release-connection-interval 300000 12) pool-use-max-write false 13) proxied-auth-use-v1 false 14) remote-ldap-server-address localhost 15) remote-ldap-server-connect-timeout 10000 16) remote-ldap-server-port 1389 17) remote-ldap-server-read-only false 18) remote-ldap-server-read-timeout 10000 19) remote-ldap-server-ssl-policy never 20) remote-ldap-server-ssl-port 636 21) saturation-precision 5 22) ssl-client-alias - 23) ssl-key-manager-provider - 24) ssl-trust-all false 25) ssl-trust-manager-provider -
注意: ほとんどの拡張プロパティ(SSLプロパティを除く)が、LDAPサーバー拡張の作成時にデフォルトで設定されます。 |
これらの値を変更するには、第20.2.1.5項「LDAPサーバー拡張のプロパティの変更」を参照してください。
モニタリング・プロパティの詳細は、第20.2.1.7項「LDAPデータ・ソースの接続モニタリング・プロパティの変更」を参照してください。
SSL (セキュリティ)プロパティの詳細は、第27章「プロキシ/データ・ソース間のセキュリティ構成」を参照してください。
新規LDAPサーバー拡張を作成するには、次に示すように、dsconfig create-extension
コマンドを使用します:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
create-extension \
--extension-name DS-proxy5 \
--type ldap-server \
--set enabled:true \
--set remote-ldap-server-address:DS5-hostname
--set remote-ldap-server-port:1389
拡張のtype
はldap-server
である必要があります。新規拡張の名前は、extension-name
で定義します。この例では、DS-proxy5
です。
作成している拡張を関連付けるリモートLDAPサーバーの名前も指定する必要があります(remote-ldap-server-address
)。リモートLDAPサーバーのホスト名またはIPアドレスを指定できます。
remote-ldap-server-port
を指定しないと、デフォルトのLDAPポート1389であると見なされます。
LDAPサーバー拡張のプロパティを変更するには、set-extension-prop
サブコマンドを使用します。このサブコマンドを使用すると、次の操作を実行できます:
LDAPサーバー拡張を有効にする(true
)か、それとも有効にしない(false
)かを設定できます。
リモートLDAPディレクトリ・サーバーのアドレスおよびポート(remote-ldap-server-address
およびremote-ldap-server-port
)を変更できます。
データ・ソースのモニタリングの実行に拡張で使用される、ユーザーの資格証明を設定できます(monitoring-bind-dn
およびmonitoring-bind-password
)。これを空白のままにすると、モニタリングはデフォルトである匿名で実行されます。
たとえば、リモートLDAPサーバーの変更は、よく行われる操作です。次のようにして、新規リモートLDAPサーバーのアドレスとポートを設定する必要があります。
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
set-extension-prop \
--extension-name DS-proxy5 \
--set remote-ldap-server-address:DS5-hostname \
--set remote-ldap-server-port:3388
LDAPサーバー拡張の拡張プロパティを変更するには、第20.2.1.6項「LDAPサーバー拡張の拡張プロパティの変更」を参照してください。
次の拡張プロパティを構成できます:
pool-increment
接続プールのサイズを大きくするまたは小さくする際の増分。remote-ldap-server-ssl-policy
プロパティがuser
に設定されると、2つの接続プールが作成され、各プールのサイズの増分がpool-increment
に設定されます。
デフォルト値は接続数5です。
pool-initial-size
接続プールの初期サイズ。これは、プールの初期化時に作成される初期接続数です。pool-initial-size
プロパティは、プールの最小サイズでもあります。
デフォルト値は接続数10です。
remote-ldap-server-ssl-policy
プロパティがuser
に設定されると、2つの接続プールが作成され、各プールの初期サイズ、つまり最小サイズがpool-initial-size
に設定されます。このため、最初は合計接続数が、pool-initial-size
で示される接続数の2倍になる可能性があります。
詳細は、第27.2項「セキュアな接続のモード」を参照してください。
pool-max-size
接続プールの最大サイズ。これは、1つのプールに割り当てることができる最大接続数です。remote-ldap-server-ssl-policy
プロパティがuser
に設定されると、2つの接続プールが作成され、各プールの最大サイズがpool-max-size
に設定されます。
デフォルト値は接続数1000です。
pool-max-write
1つの接続プールに同時に割り当てることができる書込み接続の最大数。整数を指定します。このパラメータは、pool-use-max-write
パラメータがtrue
に設定されている場合にのみ、考慮されます。
デフォルト値は接続数0です。
pool-release-connection-interval
プロキシに送信されているトラフィックがない場合に、プロキシで接続が未使用と見なされるまでの時間。接続数が前に増加されている接続プールの場合、そのサイズが縮小されます。未使用の接続の数がpool-increment
より大きい場合、プールのサイズはpool-increment
の分だけ縮小されます。これは、未使用の接続がクローズされ、プールから削除されることを意味します。
デフォルト値は、300000ミリ秒(30秒)です。
pool-use-max-write
このブール値がtrueに設定されるとpool-max-write
パラメータが考慮されますが、そうでない場合は考慮されません。
デフォルトで、pool-use-max-write
はfalseに設定されます。
proxied-auth-use-v1
プロキシ認可制御モードを使用している場合、制御のデフォルトのバージョンはv2です。互換性の理由により前のバージョンを使用する場合は、proxied-auth-use-v1
をtrueに設定します。
デフォルトで、proxied-auth-use-v1
はfalseに設定されます。
制御の詳細は、付録B「サポートされている制御および操作」を参照してください。
remote-ldap-server-read-timeout
読取りのタイムアウト。リモートLDAPサーバーがレスポンスを返す前にタイムアウトに達すると、プロキシからクライアントにエラーが返されます。
デフォルトで、この値は10000ミリ秒(10秒)です。
saturation-precision
飽和精度は、飽和しきい値の計算に使用されます。飽和限度はリクエストの送受信によって変化するため、飽和精度は、どれくらい飽和が変化したときに、飽和が考慮されることになるかを示します。
デフォルトで、考慮に入れられるまで飽和は5%まで変化できます。
モニタリング・プロパティについては、第20.2.1.7項「LDAPデータ・ソースの接続モニタリング・プロパティの変更」で説明しています。
SSLプロパティは、セキュリティ機能です。これらのプロパティの詳細は、第27章「プロキシ/データ・ソース間のセキュリティ構成」を参照してください。
LDAPサーバー拡張の拡張プロパティを変更するには、set-extension-prop --advanced
コマンドを使用します。
注意: これらの拡張プロパティは、デフォルトで設定されており、通常は変更されません。 |
変更する可能性がある拡張プロパティの例として、pool-max-size
があります。強力なリモートLDAPサーバーを使用しており、最大数のリクエストを受信するようプロキシを構成している場合は、次のようにpool-max-size
を増加できます:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
set-extension-prop --advanced \
--extension-name DS-proxy5 \
--set pool-max-size:2000
LDAPサーバー拡張のdsconfig --advanced
コマンドを使用すると、次のモニタリング・プロパティを表示または変更できます。明記されていないかぎり、すべてのプロパティはプロアクティブ・モニタリングに関連しています。
monitoring-check-interval
モニタリング・チェックの間隔。これは、プロキシ・プロアクティブ・モニタリングでデータ・ソースのチェックが実行されるミリ秒単位の間隔です。
デフォルト値は30000ミリ秒(30秒)です。
詳細は、第23.6項「バックエンド・サーバーをモニターするためのプロキシ・インスタンスの構成」を参照してください。
monitoring-connect-timeout
プロアクティブ・モニタリング・ファシリティがリモートLDAPサーバーへの接続の試行を停止するまでのミリ秒単位の最大時間。
デフォルト値は、5000ミリ秒(5秒)です。0は無制限を意味します。
monitoring-inactivity-timeout
リモート・サーバーによる接続のクローズを回避するために定期的にアイドル接続がチェックされるまでのミリ秒単位の時間間隔。このパラメータの値は、monitoring-check-interval
より長く設定する必要があります。
デフォルト値は、120000ミリ秒(120秒)です。
monitoring-ping-timeout
プロアクティブ・モニタリングでリモート・サーバーへのpingが試行されるミリ秒単位の最大時間。
デフォルト値は、5000ミリ秒(5秒)です。
remote-ldap-server-read-timeout
接続が失敗したと見なされるまで、LDAPサーバー拡張がリモート・サーバーからのレスポンスを待機するミリ秒単位の最大時間。0は無制限を意味します。
remote-ldap-server-connect-timeout
接続が失敗したと見なされるまで、モニタリングでリモート・サーバーへの接続が試行されるミリ秒単位の最大時間。0は無制限を意味します。
デフォルトは10000ミリ秒(10秒)です。
この項では、リモートLDAPサーバーとの通信に必要なLDAPプロキシ・ワークフロー要素を構成する方法を説明します。
この項の内容は次のとおりです。
特定のプロキシ・サーバー・インスタンスに構成されているすべてのワークフロー要素のリストを表示するには、次に示すように、dsconfig list-workflow-elements
コマンドを使用します。
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \ list-workflow-elements Workflow Element : Type : enabled -----------------:--------------------:-------- adminRoot : ldif-local-backend : true load-bal-we1 : load-balancing : true proxy-we1 : proxy-ldap : true proxy-we2 : proxy-ldap : true
プロキシ・ワークフロー要素は、タイプがproxy-ldap
になっているものです。
プロキシ・ワークフロー要素のプロパティを表示するには、次に示すように、dsconfig get-workflow-element-prop
コマンドを使用します:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
get-workflow-element-prop --element-name proxy-we1
Property : Value(s) --------------------------------------:-------------------- client-cred-mode : use-client-identity enabled : true ldap-server-extension : proxy1 remote-ldap-server-bind-dn : - remote-ldap-server-bind-password : - use-proxy-auth : false
次のプロパティが表示されます:
client-cred-mode
プロキシからリモートLDAPサーバーに接続する方法を示します。この例では、ステータスはuse-client-identity
になっています。これは、クライアントでプロキシへの接続に使用されたものと同じ資格証明を使用してプロキシからリモートLDAPサーバーに接続されることを意味しています。
これがデフォルト・モードです。
詳細は、第27章「プロキシ/データ・ソース間のセキュリティ構成」を参照してください。
enabled
ワークフローが有効になっている(true
)か、それとも有効になっていない(false
)かを示します。
ldap-server-extension
ワークフロー要素が関連付けられているLDAPサーバー拡張の名前です。
client-cred-mode
がuse-specific-identity
またはuse-proxy-auth
の場合に、リモートLDAPサーバーへの接続にプロキシで使用される、ユーザーの資格証明です。
プロキシLDAPワークフロー要素を作成するには、LDAPサーバー拡張を構成しておく必要があります。
プロキシLDAPワークフロー要素を作成するには、次に示すように、dsconfig create-workflow-element
コマンドを使用します:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
create-workflow-element \
--element-name proxy-we5 \
--type proxy-ldap \
--set enabled:true \
--set client-cred-mode:use-client-identity \
--set ldap-server-extension:DS-proxy5
ワークフロー要素のタイプは、proxy-ldap
である必要があります。新規プロキシLDAPワークフロー要素の名前は、element-name
で定義します。この例では、proxy-we5
です。
クライアント資格証明モード(client-cred-mode)は、プロキシがリモートLDAPサーバーに接続する方法を示します。この例では、資格証明モードはuse-client-identity
になっています。これは、クライアントでプロキシへの接続に使用されたものと同じ資格証明を使用してプロキシからリモートLDAPサーバーに接続されることを意味しています。これがデフォルト・モードです。
注意:
|
詳細は、第27章「プロキシ/データ・ソース間のセキュリティ構成」を参照してください。
プロキシLDAPワークフロー要素のプロパティを変更するには、set-workflow-element-prop
コマンドを使用します。
次のプロパティを変更できます:
プロキシLDAPワークフロー要素を有効にする(true
)か、それとも有効にしない(false
)かを設定できます。
使用するクライアント資格証明モードを設定できます(client-cred-mode
)。
LDAPサーバー拡張を関連付けて、使用するリモートLDAPサーバーを指定できます(ldap-server-extension
)。
リモートLDAPサーバーへの接続にプロキシで使用する、ユーザーの資格証明を設定できます(remote-ldap-server-bind-dn
およびremote-ldap-server-bind-password
)。次の構文がサポートされています:
<password-value>
file://<password-file>
コマンド行で、クリア・テキストでパスワードを渡すことはサポートされていますが、お薦めしません。パスワード・ファイルを使用することをお薦めします。パスワード・ファイルは、コマンドが実行されたら削除できます。
たとえば、別のリモートLDAPサーバーを使用するために、ワークフロー要素で使用するLDAPサーバー拡張を変更する場合、次のように実行します:
$ dsconfig -h localhost -p 4444 -D "cn=Directory Manager" -j pwd-file -X -n \
set-workflow-element-prop --advanced \
--element-name proxy-we5 \
--set remote-ldap-server-bind-dn:uid=Specific\ User,dc=example,dc=com \
--remote-ldap-server-bind-password:file://pwd-file \
--set ldap-server-extension:DS-proxy3 \
--set client-cred-mode:use-specific-identity
エンド・ユーザーが1つの認証済操作を実行すると、プロキシLDAPワークフロー要素は、次の2つの個別操作を受け取ります:
リモート・サーバーに対してユーザーを認証するバインド操作。
実行する操作。
バインド操作が実行される際には、プロキシLDAPワークフロー要素は、LDAPサーバー拡張から接続を取得し、バインド操作を実行してから、接続を解放します。
実際の操作が着信すると、プロキシLDAPワークフロー要素は、LDAPサーバー拡張から接続を再度取得します。該当する資格証明にバインドされている接続が検出された場合、その接続が再利用されます。検出されなかった場合、新規接続を認証する必要があります。この追加認証操作をサイレント・バインドと呼びます。
サイレント・バインドの実行に使用する一連の資格証明は、バインド・モードで指定されます。これは、LDAPワークフロー要素のプロパティの1つです。これらの資格証明は、クライアント資格証明またはプロキシ資格証明です。表20-1は、Oracle Unified Directoryでサポートされているバインド・モードを示しています。
表20-1 Oracle Unified Directoryでサポートされているバインド・モード
モード | 説明 |
---|---|
|
サイレント・バインドの実行にクライアント資格証明を使用します。 |
|
サイレント・バインドの実行にプロキシ資格証明を使用します。 |
表20-1に示されているバインド・モードごとに、追加のパラメータを構成して、サーバーの動作を微調整することができます。
これらのパラメータの詳細は、次の各項を参照してください。
use-client-identity
バインド・モードの構成バインド・モードがuse-client-identity
に設定された場合、サーバーでは特定のパラメータによって阻止されないかぎり、サイレント・バインドの実行にクライアント資格証明が使用されます。
サーバーでクライアント資格証明を使用できないようにするパラメータの詳細は、次の各項を参照してください。
包含リストおよび除外リストの使用
次のリストを構成できます:
包含リスト: リモート・サーバーで処理される接尾辞をリストします。
除外リスト: リモート・サーバーで処理されない接尾辞をリストします。
クライアント・バインドDNが包含リスト上のいずれかのDNの子であるが、除外リスト上のいずれのDNの子でもない場合、プロキシ・サーバーではサイレント・バインドの実行にクライアント資格証明が使用されます。それ以外の場合、プロキシ・サーバーでは、サイレント・バインドの実行にプロキシ資格証明が使用されます。両方のリストがともに空の場合、プロキシ・サーバーでは常にクライアント資格証明が使用されます。
包含リストと除外リストは相互に排他的ではなく、同時に使用できます。ただし、1つのリストのみを定義することをお薦めします。また、両方のリストに同一の接尾辞を定義することはできません。
never-bind
パラメータの使用
never-bind
パラメータは、プロキシでクライアント資格証明を使用したバインドを実行する必要がある場合は常に適用できます。このフラグがtrue
に設定されると、プロキシ・サーバーではリモート・データ・ソースからユーザー・エントリが読み取られ、バインドをリモート・サーバーに転送するのではなく、ユーザー・パスワード自体が検証されます。
注意: ユーザー・エントリの読取りに使用される資格証明は、プロキシLDAPワークフロー要素のremote-ldap-server-bind-dn およびremote-ldap-server-bind-password プロパティで定義されているプロキシ資格証明です。 |
受信バインド操作に重要な制御が含まれている場合、バインド操作専用の制御はnever-bind
機能と互換性がないため、エラー結果が返されます。
注意: プロキシでユーザー・エントリの読取りに独自の資格証明が使用される場合、プロキシ認可制御を操作に追加して、リクエストの送信元のクライアントのアイデンティティを示すことができます。use-proxy-auth プロパティの値によって、制御を追加する必要があるかどうかが指定されます。 |
use-specific-identity
バインド・モードの構成バインド・モードがuse-specific-identity
に設定されると、プロキシ・サーバーでは、すべてのサイレント・バインドの実行にプロキシ資格証明が使用されます。プロキシ資格証明は、プロキシLDAPワークフロー要素の次のプロパティで定義されます。remote-ldap-server-bind-dn
およびremote-ldap-server-bind-password
。
use-specific-identity
バインド・モードでは、次のパラメータを設定できます:
use-proxy-auth
パラメータの使用
use-proxy-auth
フラグがtrue
に設定されると、プロキシ・サーバーでは、バインド・リクエスト以外のすべてのリクエストにプロキシ認可制御が追加されます。プロキシ認可IDの値は、クライアント・バインドDNです。
never-bind
パラメータの使用
never-bind
パラメータは、プロキシでクライアント資格証明を使用したバインドを実行する必要がある場合は常に適用できます。このフラグがtrue
に設定されると、プロキシ・サーバーではリモート・データ・ソースからユーザー・エントリが読み取られ、バインドをリモート・サーバーに転送するのではなく、ユーザー・パスワード自体が検証されます。
注意: ユーザー・エントリの読取りに使用される資格証明は、プロキシLDAPワークフロー要素のremote-ldap-server-bind-dn およびremote-ldap-server-bind-password プロパティで定義されているプロキシ資格証明です。 |