понедельник, 21 мая 2012 г.

Схемы, объекты, атрибуты. Часть 2

Продолжение статьи Схемы, объекты, атрибуты. Часть 1, посвященное атрибутам.

Описание атрибута является типичным определением класса в ООП, с наследованием. Синтаксис описания атрибутов:

attributetype = "(" 
   OID атрибута
 [ "NAME" символьное имя ]
 [ "DESC" описание ]
 [ "SUP" OID предка ]
 [ "EQUALITY" OID правила сравнения]
 [ "ORDERING" OID правила сортировки ]
 [ "SUBSTR" OID правила получения подстроки ]
 [ "SYNTAX" OID правила проверки синтаксиса данных ]
 [ "SINGLE-VALUE" ]
 ")"

Единственным обязательным полем является OID, все остальные поля могут быть опущены или имеют значение по умолчанию. Разберем список полей:

  • NAME - имя, которое будет являться синонимом OID. Имя должно быть уникальным в пределах тех схем, которые используются в вашем каталоге.
  • DESC - описание атрибута, помогает при чтении схемы человеком понять назначение атрибута
  • SUP - OID или имя атрибута, от которого наследуются свойства
  • EQUALITY - OID или имя правила сравнения значений атрибута, например integerMatch позволит использовать не только знак равенства при поиске по значению атрибута, но так же сравнения > (больше) и < (меньше)
  • ORDERING - OID или имя правила сортировки атрибутов, например caseIgnoreOrderingMatch сортирует значения строковых атрибутов без учета регистра.
  • SUBSTR - OID или имя правила работы с подстроками значения атрибута, имеет смысл только для атрибутов, которые строятся на синтаксисе строк.
  • SYNTAX - OID правила проверки синтаксиса значения, например - 1.3.6.1.4.1.1466.115.121.1.27, описывает целочисленный атрибут. Попытка присвоить ему значение с символами выходящими за рамки [0-9] вызовет ошибку. 
  • SINGLE-VALUE - указывает что данный атрибут может принимать только одно значение при создании экземпляра объекта. По умолчанию атрибуты могут иметь множественные значение.
Отвлечемся от теории и посмотрим на описания трех атрибутов двух классов dcObject и organization, которые использовались в первой статье:

attributetype ( 2.5.4.41 NAME ('name') 
        DESC 'RFC4519: common supertype of name attributes' 
        EQUALITY caseIgnoreMatch 
        SUBSTR caseIgnoreSubstringsMatch 
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )
        DESC 'RFC2256: organization this object belongs to'
        SUP name )

attributetype ( 2.5.4.13 NAME ('description') 
        DESC 'RFC4519: descriptive information' 
        EQUALITY caseIgnoreMatch 
        SUBSTR caseIgnoreSubstringsMatch 
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )

attributetype ( 0.9.2342.19200300.100.1.25
        NAME ( 'dc' 'domainComponent' )
        DESC 'RFC1274/2247: domain component'
        EQUALITY caseIgnoreIA5Match
        SUBSTR caseIgnoreIA5SubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

Атрибут 'o' имеет более длинный синоним 'organizationName' и является наследником атрибута 'name'. Атрибут 'name' является строковым (1.3.6.1.4.1.1466.115.121.1.15 - UTF-8 строка), поддерживает сравнение без учета регистра (caseIgnoreMatch) и поиск по частичному значению без учета регистра (caseIgnoreSubstringsMatch).

Атрибут 'description' является самостоятельно определенным атрибутом, идентичным по характеристикам атрибуту 'name'. За исключением допустимой длины поля: 'name' допускает 32k текста в качестве значения, а 'description' только 1к.

Атрибут 'dc' имеет синоним 'domainComponent' и является ASCII строкой (1.3.6.1.4.1.1466.115.121.1.26 - IA5 String syntax). Используются правила сравнения без учета регистра (caseIgnoreIA5Match) и поиск по неполному значению без учета регистра (caseIgnoreIA5SubstringMatch).

Полный список допустимых вариантов синтаксиса атрибутов можно найти на странице: LDAPv3 Syntaxes. Там же описываются требования к значениям атрибута, которые накладывает тот или иной синтаксис.

Часто встречающиеся правила сравнения:


Имя правилаOID правилаОбласть применения
(синтаксис атрибута)
caseExactIA5Match1.3.6.1.4.1.1466.109.114.1IA5 String (ascii)
1.3.6.1.4.1.1466.115.121.1.26
caseExactMatch2.5.13.5Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
caseIgnoreIA5Match1.3.6.1.4.1.1466.109.114.2IA5 String (ascii)
1.3.6.1.4.1.1466.115.121.1.26
caseIgnoreMatch2.5.13.2Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
distinguishedNameMatch2.5.13.1DN
1.3.6.1.4.1.1466.115.121.1.12
generalizedTimeMatch2.5.13.27Generalized Time
1.3.6.1.4.1.1466.115.121.1.24
integerFirstComponentMatch2.5.13.29Integer
1.3.6.1.4.1.1466.115.121.1.27
integerMatch2.5.13.14Integer
1.3.6.1.4.1.1466.115.121.1.27
objectIdentifierFirstComponentMatch2.5.13.30OID
1.3.6.1.4.1.1466.115.121.1.38
objectIdentifierMatch2.5.13.0OID
1.3.6.1.4.1.1466.115.121.1.38
octetStringMatch2.5.13.17Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
telephoneNumberMatch2.5.13.20Telephone Number
1.3.6.1.4.1.1466.115.121.1.50
uTCTimeMatch2.5.13.25UTC Time
1.3.6.1.4.1.1466.115.121.1.53

Часто встречающиеся правила сортировки:


Имя правилаOID правилаОбласть применения
(синтаксис атрибута)
caseExactOrderingMatch2.5.13.6Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
caseIgnoreOrderingMatch2.5.13.3Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
distinguishedNameOrderingMatch1.3.18.0.2.4.405DN
1.3.6.1.4.1.1466.115.121.1.12
generalizedTimeOrderingMatch2.5.13.28Generalized Time
1.3.6.1.4.1.1466.115.121.1.24
Часто встречающиеся правила сравнения подстрок:


Имя правилаOID правилаОбласть применения
(синтаксис атрибута)
caseExactSubstringsMatch2.5.13.7Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
caseIgnoreSubstringsMatch2.5.13.4Directory String (UTF-8)
1.3.6.1.4.1.1466.115.121.1.15
telephoneNumberSubstringsMatch2.5.13.21Telephone Number
1.3.6.1.4.1.1466.115.121.1.50


В следующей части этой темы мы создадим собственное расширение схемы и применим его на практике.

Комментариев нет:

Отправить комментарий