Việc tạo một file Custom Schema cho OpenLDAP là một quy trình đơn giản:
• Chỉ định một UID duy nhất cho tất cả các loại thuộc tính và cả lớp đối tượng. • Tạo một file lược đồ và đưa nó vào slapd.conf
Chương 2 đã mô tả cách để được một số private enterprise từ IANA (xem form ở http://www.iana.org/cgi-bin/enterprise.pl và RFC 3383). Khi tạo ra các thuộc tính mới hoặc các lớp đối tượng, đó là một ý tưởng tốt để sử dụng một OID được đảm bảo là duy nhất, schema có thể được dùng hoặc không được dùng bên ngoài của tổ chức (organization) của bạn. Cách tốt nhất để đảm bảo rằng OID là duy nhất là thu được một số private enterprise và đặt tất cả các định nghĩa theo con số đó.
Ví dụ: giả sử rằng ứng dụng khách hàng LDAP yêu cầu một lớp đối tượng là person. Lớp đối tượng mới này sẽ chứa tất cả các thuộc tính sở hữu bởi các đối tượng person, bổ sung các thuộc tính UserPassword và mail.
Để tạo đối tượng mới này, ta cấp phát OID arc 1.3.6.1.4.1.7165.1.1.1 cho các lớp đối tượng mới:
iso (1) org (3) dod (6) internet (1) private (4) enterprise (1) SAMBA.org (7165) plainjoe.org (1)
O'Reilly LDAP Book(1)
Số private enterprise 7165 được cấp phát bởi IANA. Arc 7165.1 được phân bổ cho domain plainjoe.org, và 7165.1.1 được thiết lập cho cuốn sách này. Ta không thể làm gì với các con số ở trên 7165.1 trên cây, nhưng ta có thể chỉ định các số ở dưới sao cho phù hợp. Ta chọn 7165.1.1.1 cho các lớp đối tượng LDAP đã được tạo, và 7165.1.1.2 cho các thuộc tính mới. Ta cũng có thể cho các đối tượng mới trực thuộc plainjoe.org, nhưng có thể có vẫn đề nếu muốn tạo các loại đối tượng khác.
SAMBA.org (7165) plainjoe.org (1)
O'Reilly LDAP Book(1) |-- objectclasses (1) |-- attributeTypes (2)
Bây giờ ta tạo đối tượng mới là plainjoePerson. Thêm các định nghĩa sau vào file lược đồ tùy định (custom schema) tên plainjoe.schema; ta sẽ dùng file này cho tất cả đối tượng tùy định mà mình định nghĩa. ## objectclass definition for 'plainjoePerson' depends on core.schema.
MUST (userPassword $ mail) )
Các thuộc tính mới có thể được định nghĩa tương tự hoặc định nghĩa dựa trên các thuộc tính có sẵn. Ví dụ, ta có thể tạo thuộc tính plainjoePath để lưu trữ bằng cách định nghĩa trong
plainjoe.schema như sau:
## Store a case-sensitive path to a directory.
attributetype( 1.3.6.1.4.1.7165.1.1.2.1 NAME 'plainjoePath' DESC 'A directory on disk'
SUBSTR caseExactIA5SubstringsMatch EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
Cuối cùng, cần phải thêm dòng include trong slapd.conf
# /usr/local/etc/openldap/slapd.conf
# Global section
## Include the minimum schema required.
include /usr/local/etc/openldap/schema/core.schema
## **NEW**
## Include support for special plainjoe objects.