スキーマ

スキーマ

データベース構造の定義。

LDAPスキーマ

  • 格納されるデータの形態が決定付けられる。
  • オブジェクトクラスの定義と、属性の定義からなる。
  • 基本的なスキーマは、あらかじめスキーマファイルとして提供されている。

基本スキーマファイル

core.schema OpenLDAPのコアスキーマ(必須)
cosine.schema CosineとInternet X.500スキーマ(RFC1274)
inetorgperson.schema 人に関した定義に関するスキーマ(RFC2798)
corba.schema CORBAスキーマ(RFC2714)
nis.schema NIDに関するスキーマ(RFC2307)
java.schema JAVAに関するスキーマ(RFC2713)
openldap.schema OpenLDAP Projectの実験用スキーマ
misc.schema その他の実験的なスキーマ
ppolicy.schema パスワードポリシーの為の開発中のスキーマ
スキーマファイルの利用

slapd.confファイルのincludeディレクティブを利用して読み込むスキーマファイルを指定する。

include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema

オブジェクトクラスと属性

  • 各スキーマ要素は、全世界的に一意のOID(Object Identifier: オブジェクト識別子)によって管理されている。
  • オブジェクトクラスはobjectclassにより定義される。
  • オブジェクトクラスには、ABSTRACTSTRUCTURALAUXILIARYの3つの構造型がある。
  • オブジェクトクラスにはMUST属性(必須属性)MAY属性(許可属性)が指定できる。
  • 属性はattributetypeにより定義される。
  • 属性の検索方法の定義を照合規則といい、EQUALITYORDERINGSUBSTRの3つがある。
  • 属性のデータ型はSYNTAXに、OIDを使って指定する。

OIDの概要

  • 全世界的に一意で無ければならない。
  • IANA(Internet Assigned Numbers Authority)によって管理されている。

オブジェクトクラスの定義

objectclassディレクティブを利用

objectclass ( 2.5.6.6 NAME 'person'     ← OIDと名前の定義: OID NAME objectclass名
  DESC 'RFC2256: a person'              ← オブジェクトクラスの説明
  SUP top STRUCTURAL                    ← オブジェクトクラスの形式
  MUST ( sn $ cn )           ← 必須属性
  MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )    ← 許可属性
  • SUPには基底オブジェクトクラスを指定する。指定したオブジェクトクラスの機能が、継承されて利用される。personはtopというクラスを継承している。
オブジェクトクラスの構造型
ABSTTACT(抽象型) 他のオブジェクトクラスの基底クラスとして使われるオブジェクトクラス
STRUCTUAL(構造型) ディレクトリ構造を作る事ができるオブジェクトクラス。各エントリには必ず1つの構造型オブジェクトクラスが必要。
AUXILIARY(補助型) 構造型と組み合わせる事で属性を追加する事が出来るオブジェクトクラス。単独でディレクトリ構造を形成する事はできない。

属性の定義

attributetypeディレクティブを利用。

attributetype ( 2.5.4.5 NAME 'serialNumber'      ← OIDと属性の名前の定義
  DESC 'RFC2256: serial number of the entity'       ← 属性の説明
  EQUALITY caseIgnoreMatch             ← 照合規則の設定
  SUBSTR caseIgnoreSubstringsMatch                  ← 照合規則の設定
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )    ← 属性のデータ型の設定
照合規則
  • 属性の検索をどのような方法で行うかについての定義。
  • 1つの属性には、必ず1つ以上の照合規則が定義されてなければならない。


照合規則の型

EQUALITY(同値照合) 文字列や値の全体に対して照合を行う。
ORDERING(順序照合) 値の大小や文字列の順序を使って照合を行う。
SUBSTR(部分文字列照合) 文字列の一部分に対して照合を行う。


EQUALITY型の照合規則の例

booleanMatch 真偽(0/1)として照合
caseIgnoreMatch 英大小文字を区別せず、スペースを無視して照合。
caseExactMatch 英大小文字を区別し、スペースを無視して照合。
distinguishedNameMatch 識別名(DN)として照合。
intergerMatch 整数として照合。
numbericStringMatch 数値として照合。
octetStringMatch オクテット文字列として照合。
objectidentiferMatch OIDとして照合。


ORDERING型の照合規則の例

caseIgnoreOrderingMatch 英大小文字を区別せず、スペースを無視して照合。
caseExactOrderingMatch 英大小文字を区別し、スペースを無視して照合。
intergerOrderingMatch 整数として照合。
numericStringOrderingMatch 数値として照合。
octetStringOrderingMatch オクテット文字列として照合。


SUBSTR型の照合規則の例

caseIgnoreSubstringsMatch 英大小文字を区別せず、スペースを無視して照合。
caseExactSubstringsMatch 英大小文字を区別し、スペースを無視して照合。
numericStringSubstringsMatch 数値として照合。
octetStringSubstringsMatch オクテット文字列として照合。
SYNTAX
  • SYNTAXには属性がどのようなデータ型をとるか指定する。
  • 指定にはOID(属性のOIDとは別物)を利用する。


SYNTAXに指定できるデータ型のOID

1.3.6.1.4.1.1466.155.121.1.7 真偽値
1.3.6.1.4.1.1466.155.121.1.12 DN形式の文字列
1.3.6.1.4.1.1466.155.121.1.15 Unicode(UTF-8)文字列
1.3.6.1.4.1.1466.155.121.1.26 ASCII文字列
1.3.6.1.4.1.1466.155.121.1.27 整数値
1.3.6.1.4.1.1466.155.121.1.34 DNよびUID
1.3.6.1.4.1.1466.155.121.1.36 数値文字列
1.3.6.1.4.1.1466.155.121.1.38 OID形式の文字列
1.3.6.1.4.1.1466.155.121.1.40 任意のオクテット文字列
1.3.6.1.4.1.1466.155.121.1.44 表示可能な文字列
1.3.6.1.4.1.1466.155.121.1.50 電話番号

拡張スキーマ

  • 既存のスキーマで定義できないスキーマ要素がある場合、独自のスキーマを定義する事ができる。
  • OIDが他と重複しないよう注意する必要がある。
  • 既存のスキーマファイルを編集するのではなく、新しいスキーマファイルを作成する。
  • slapd.confの適合性を確認する為には、slaptestコマンド利用する。

slaptest

構文
slaptest [オプション]

オプション

-d 数 デバッグレベルを指定する。
-f ファイル名 slapd.confの代わりに利用する設定ファイルを指定する。
-u dry-runモードで検査を行う(データベースがオープンできなくても設定が正しければエラーを返さない)。
-v 冗長モードで実行する。