13.5 LDAPトランザクション

eDirectory LDAPサーバは、複数の更新操作を1つのアトミックな操作(トランザクションともいう)にまとめることをサポートします。eDirectoryのLDAPによるトランザクションのサポートは“LDAP Transactions”および“LDAP: Grouping of Related Operations”という2つのインターネット仕様に基づいています。

LDAPトランザクションを使用することで、LDAPアプリケーションは複数のLDAP更新操作(追加、変更、削除、名前変更)をグループとして送信し、この操作のグループ全体をコミットまたは中止することができます。

次のように、LDAPトランザクションのコンテキストで出現するエンティティがいくつかあります。

  • CreateGroupingRequest ( 2.16.840.1.113719.1.27.103.1 ) – これは関連する操作をグループ化するLDAP拡張操作です。拡張操作は要求されたグループ化のタイプを識別するcreateGroupTypeという値を保持します。LDAPトランザクションの場合、グループ化タイプはtransactionGroupingTypeです。( 2.16.840.1.113719.1.27.103.8)

  • CreateGroupingResponse ( 2.16.840.1.113719.1.27.103.1 ) – これはcreateGroupingRequestへのLDAPサーバの応答であり、groupCookieとオプションのcreateGroupValueという2つの応答フィールドが含まれています。

  • GroupingControl ( 2.16.840.1.113719.1.27.103.7 ) - これは、このコントロールによって保持される値であるgroupCookieにより、グループ化に対する操作の関連付けを示すために使用されます。

  • EndGroupingRequest ( 2.16.840.1.113719.1.27.103.2 ) – これは、グループ化要求の終了を示すために使用する、もう1つのLDAP拡張操作です。LDAPトランザクションの場合、これはトランザクションの終了を示し、最終的にトランザクションのコミットまたは中止になります。

  • EndGroupingResponse ( 2.16.840.1.113719.1.27.103.2 ) – これは、endGroupingResponseに対するLDAPサーバの応答であり、成功または失敗をLDAPクライアントに示します。

LDAPトランザクションで、LDAPサーバとLDAPクライアントがやり取りする要求と応答のシーケンスは次のとおりです。

  • サーバでアトミックな操作(つまりトランザクション)として処理する複数のLDAP操作をクライアントが送信する場合、最初にcreateGroupingRequestを送信する必要があります。その際、createGroupTypeはtransactionGroupingTypeとし、createGroupValueは付けません。

  • eDirectoryサーバがトランザクションを処理できる場合、クライアントから要求されたグループ化を固有に識別するgroupingCookieとともに、成功の結果コードを返します。処理できない場合、サーバは失敗の理由を示す非成功の結果コードをクライアントに返します。

  • クライアントがサーバから成功の結果コードを受け取ると、サーバから返されるgroupingCookieを含むGroupingControlをその後の更新操作に添付し、1つのトランザクションの一部として処理することを示します。サーバがトランザクションの一部として更新操作を処理できる場合、サーバは成功を返し、この要求をキューに入れます。サーバがトランザクションの一部として更新操作を処理できない場合、サーバは失敗の理由を示す非成功の結果コードをクライアントに返します。

  • クライアントがグループ化コントロールを添付してすべての更新操作をサーバに送信した後、クライアントはgroupingCookieとともにendGroupingRequestをサーバに送信し、トランザクションを終了することを通知します。endGroupValueがない場合はコミット要求を示し、一方、空のendGroupValueは中止要求を示します。

  • サーバは、1つのトランザクション内の保留中のすべての操作を適用します。成功すると、成功を返します。成功しなかった場合、非成功の結果コードを返します。

  • クライアントとサーバ間の上記のやり取りの間のいずれかの時点で、サーバがトランザクションの指定の処理を続行できない場合、サーバはendGroupingNotice (2.16.840.1.113719.1.27.103.4)を発行します。その後、クライアントがcookieを使用し続けると、非成功の結果コードを含む応答を受け取ります。

rootDSEエントリのsupportedGroupingTypes属性にtransactionGroupingTypeが存在すれば、LDAPトランザクションがサポートされます。

eDirectoryのLDAPトランザクションの実装は、LDAPトランザクション仕様の古いバージョンに基づいています。本書の執筆時点で、LDAPトランザクションの最新リビジョンのドラフトはLightweight Directory Access Protocol (LDAP) Transactionsで参照できます。

13.5.1 制限

LDAPトランザクションの機能には、次の制限があります。

  • トランザクションとしてグループ化された操作の影響を受けるすべてのオブジェクトは、サーバにローカルにホストされている必要があります。これらの操作のいずれにおいても、LDAPサーバが別のサーバにチェーンする必要はありません。

  • スキーマの変更およびDN変更の操作(サブツリーの移動?)は、LDAPトランザクション内にグループ化できません。

  • ストリーム構文のパスワードおよび属性は、LDAPトランザクションの一部として追加できません。

  • 1つのトランザクションを別のトランザクションにネストすることはサポートされていません。