4. Schema della directory
Come definito in [X.501]:
Lo schema della directory è un insieme di definizioni e vincoli
relativi alla struttura del DIT, ai possibili modi di denominare le
voci, alle informazioni che possono essere contenute in una voce,
agli attributi utilizzati per rappresentare tali informazioni e alla
loro organizzazione in gerarchie per facilitare la ricerca e il
recupero delle informazioni, nonché ai modi in cui i valori degli
attributi possono essere confrontati nelle asserzioni di valore di
attributo e nelle asserzioni di regola di corrispondenza.
NOTA 1 - Lo schema consente, ad esempio, al sistema di directory di:
- impedire la creazione di voci subordinate appartenenti alla classe
di oggetti errata (ad esempio, un paese subordinato a una persona);
- impedire l'aggiunta a una voce di tipi di attributo non appropriati
alla classe di oggetti (ad esempio, un numero di serie nella voce
di una persona);
- impedire l'aggiunta di un valore di attributo con una sintassi che
non corrisponde a quella definita per il tipo di attributo (ad
esempio, una stringa stampabile in una stringa di bit).
Formalmente, lo schema della directory comprende un insieme di:
a) definizioni di forma del nome che definiscono relazioni di
denominazione primitive per le classi di oggetti strutturali;
b) definizioni di regola di struttura del DIT che definiscono i nomi
che le voci possono avere e i modi in cui le voci possono essere
correlate tra loro nel DIT;
c) definizioni di regola di contenuto del DIT che estendono la
specifica degli attributi consentiti per le voci oltre quelli
indicati dalle classi di oggetti strutturali delle voci;
d) definizioni di classe di oggetti che definiscono l'insieme di base
degli attributi obbligatori e facoltativi che, rispettivamente,
devono e possono essere presenti in una voce di una determinata
classe, e che indicano il tipo di classe di oggetti definito;
e) definizioni di tipo di attributo che identificano l'identificatore
di oggetto con cui è noto un attributo, la sua sintassi, le regole
di corrispondenza associate, se si tratta di un attributo operativo
e, in tal caso, il relativo tipo, se si tratta di un attributo
collettivo, se può avere più valori e se deriva o meno da un altro
tipo di attributo;
f) definizioni di regola di corrispondenza che definiscono le regole
di corrispondenza.
E in LDAP:
g) definizioni di sintassi LDAP che definiscono le codifiche utilizzate
in LDAP.
4.1. Definizioni dello schema
Le definizioni dello schema in questa sezione sono descritte mediante ABNF e si basano sulle produzioni comuni specificate nella Sezione 1.2, nonché sulle seguenti:
noidlen = numericoid [ LCURLY len RCURLY ]
len = number
oids = oid / ( LPAREN WSP oidlist WSP RPAREN )
oidlist = oid *( WSP DOLLAR WSP oid )
extensions = *( SP xstring SP qdstrings )
xstring = "X" HYPHEN 1*( ALPHA / HYPHEN / USCORE )
qdescrs = qdescr / ( LPAREN WSP qdescrlist WSP RPAREN )
qdescrlist = [ qdescr *( SP qdescr ) ]
qdescr = SQUOTE descr SQUOTE
qdstrings = qdstring / ( LPAREN WSP qdstringlist WSP RPAREN )
qdstringlist = [ qdstring *( SP qdstring ) ]
qdstring = SQUOTE dstring SQUOTE
dstring = 1*( QS / QQ / QUTF8 ) ; escaped UTF-8 string
QQ = ESC %x32 %x37 ; "\27"
QS = ESC %x35 ( %x43 / %x63 ) ; "\5C" / "\5c"
; Any UTF-8 encoded Unicode character
; except %x27 ("\'") and %x5C ("\")
QUTF8 = QUTF1 / UTFMB
; Any ASCII character except %x27 ("\'") and %x5C ("\")
QUTF1 = %x00-26 / %x28-5B / %x5D-7F
Le definizioni dello schema in questa sezione condividono inoltre alcuni termini comuni.
Il campo NAME fornisce un insieme di nomi brevi (descrittori) da utilizzare come alias per l'OID.
Il campo DESC consente facoltativamente all'amministratore della directory e/o all'implementatore di fornire una stringa descrittiva. Sebbene le specifiche possano suggerire una stringa descrittiva, non è richiesto che venga utilizzata quella suggerita (o una qualsiasi stringa descrittiva).
Il campo OBSOLETE, se presente, indica che l'elemento non è attivo.
Gli implementatori devono tenere presente che le versioni future di
questo documento potrebbero ampliare queste definizioni includendo
termini aggiuntivi. I termini il cui identificatore inizia con "X-"
sono riservati agli esperimenti privati e sono seguiti dai token
4.1.1. Definizioni delle classi di oggetti
Le definizioni delle classi di oggetti sono scritte secondo la seguente ABNF:
ObjectClassDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oids ] ; superior object classes
[ SP kind ] ; kind of class
[ SP "MUST" SP oids ] ; attribute types
[ SP "MAY" SP oids ] ; attribute types
extensions WSP RPAREN
kind = "ABSTRACT" / "STRUCTURAL" / "AUXILIARY"
dove:
4.1.2. Tipi di attributo
Le definizioni dei tipi di attributo sono scritte secondo la seguente ABNF:
AttributeTypeDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oid ] ; supertype
[ SP "EQUALITY" SP oid ] ; equality matching rule
[ SP "ORDERING" SP oid ] ; ordering matching rule
[ SP "SUBSTR" SP oid ] ; substrings matching rule
[ SP "SYNTAX" SP noidlen ] ; value syntax
[ SP "SINGLE-VALUE" ] ; single-value
[ SP "COLLECTIVE" ] ; collective
[ SP "NO-USER-MODIFICATION" ] ; not user modifiable
[ SP "USAGE" SP usage ] ; usage
extensions WSP RPAREN ; extensions
usage = "userApplications" / ; user
"directoryOperation" / ; directory operational
"distributedOperation" / ; DSA-shared operational
"dSAOperation" ; DSA-specific operational
dove:
Ogni descrizione di tipo di attributo deve contenere almeno uno dei campi SUP o SYNTAX. Se non viene fornito alcun campo SYNTAX, la descrizione del tipo di attributo assume il relativo valore dal supertipo.
Se viene fornito il campo SUP, i campi EQUALITY, ORDERING e SUBSTRING, se non specificati, assumono il relativo valore dal supertipo.
L'utilizzo userApplications, che è quello predefinito, indica che gli attributi di questo tipo rappresentano informazioni utente. In altri termini, sono attributi utente.
Un utilizzo directoryOperation, distributedOperation o dSAOperation indica che gli attributi di questo tipo rappresentano informazioni operative e/o amministrative. In altri termini, sono attributi operativi.
L'utilizzo directoryOperation indica che l'attributo di questo tipo è un attributo operativo della directory. L'utilizzo distributedOperation indica che l'attributo di questo tipo è un attributo operativo a utilizzo condiviso tra DSA. L'utilizzo dSAOperation indica che l'attributo di questo tipo è un attributo operativo specifico del DSA.
COLLECTIVE richiede l'utilizzo userApplications. L'uso di tipi di attributo collettivi in LDAP è trattato in [RFC3671].
NO-USER-MODIFICATION richiede un utilizzo operativo.
Si noti che
Il presente documento perfeziona la descrizione dello schema di X.501
richiedendo che il campo SYNTAX in un
Un limite superiore minimo suggerito per il numero di caratteri in un valore con sintassi basata su stringa, o per il numero di byte in un valore per tutte le altre sintassi, può essere indicato aggiungendo tale limite tra parentesi graffe dopo l'OBJECT IDENTIFIER della sintassi in una descrizione di tipo di attributo. Il limite non fa parte del nome stesso della sintassi. Ad esempio, "1.3.6.4.1.1466.0{64}" suggerisce che le implementazioni server consentano una stringa lunga 64 caratteri, sebbene possano consentire stringhe più lunghe. Si noti che un singolo carattere della sintassi Directory String può essere codificato in più di un ottetto, poiché UTF-8 [RFC3629] è una codifica a lunghezza variabile.
4.1.3. Regole di corrispondenza
Le regole di corrispondenza vengono utilizzate nell'esecuzione delle asserzioni di valore di attributo, ad esempio nell'esecuzione di un'operazione Compare. Vengono inoltre utilizzate nella valutazione dei filtri di ricerca, per determinare quali singoli valori aggiungere o eliminare durante l'esecuzione di un'operazione Modify e per confrontare i nomi distinti.
Ogni regola di corrispondenza è identificata da un identificatore di oggetto (OID) e, facoltativamente, da uno o più nomi brevi (descrittori).
Le definizioni delle regole di corrispondenza sono scritte secondo la seguente ABNF:
MatchingRuleDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "SYNTAX" SP numericoid ; assertion syntax
extensions WSP RPAREN ; extensions
dove:
4.1.4. Usi delle regole di corrispondenza
Un uso di una regola di corrispondenza elenca i tipi di attributo adatti all'impiego con un filtro di ricerca extensibleMatch.
Le descrizioni dell'uso delle regole di corrispondenza sono scritte secondo la seguente ABNF:
MatchingRuleUseDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "APPLIES" SP oids ; attribute types
extensions WSP RPAREN ; extensions
dove:
4.1.5. Sintassi LDAP
Le sintassi LDAP dei valori (di attributo e di asserzione) sono descritte in termini di ASN.1 [X.680] e possono avere una codifica in stringa di ottetti nota come codifica specifica di LDAP. In genere, la codifica specifica di LDAP è limitata a una stringa di caratteri Unicode [Unicode] in forma UTF-8 [RFC3629].
Ogni sintassi LDAP è identificata da un identificatore di oggetto (OID).
Le definizioni delle sintassi LDAP sono scritte secondo la seguente ABNF:
SyntaxDescription = LPAREN WSP
numericoid ; object identifier
[ SP "DESC" SP qdstring ] ; description
extensions WSP RPAREN ; extensions
dove:
4.1.6. Regole di contenuto DIT
Una regola di contenuto DIT è una «regola che disciplina il contenuto delle voci di una particolare classe di oggetti strutturale» [X.501].
Per le voci DIT di una particolare classe di oggetti strutturale, una regola di contenuto DIT specifica le classi di oggetti ausiliarie a cui le voci possono appartenere e quali attributi aggiuntivi (per tipo) devono, possono o non possono essere presenti nelle voci.
L'elenco degli attributi esclusi non può includere alcun attributo indicato come obbligatorio nella regola, nella classe di oggetti strutturale o in una qualsiasi delle classi di oggetti ausiliarie consentite.
Ogni regola di contenuto è identificata dall'identificatore di oggetto, nonché dagli eventuali nomi brevi (descrittori), della classe di oggetti strutturale a cui si applica.
Una voce può appartenere solo alle classi di oggetti ausiliarie elencate nella regola di contenuto che la governa.
Una voce deve contenere tutti gli attributi richiesti dalle classi di oggetti a cui appartiene, nonché tutti gli attributi richiesti dalla regola di contenuto che la governa.
Una voce può contenere qualsiasi attributo non escluso consentito dalle classi di oggetti a cui appartiene, nonché tutti gli attributi consentiti dalla regola di contenuto che la governa.
Una voce non può includere alcun attributo escluso dalla regola di contenuto che la governa.
Una voce è governata, se presente e attiva nel sottoschema, dalla regola di contenuto DIT applicabile alla classe di oggetti strutturale della voce (vedere la Sezione 2.4.2). Se non è presente alcuna regola attiva per la classe di oggetti strutturale della voce, il contenuto della voce è governato dalla classe di oggetti strutturale (e possibilmente da altri aspetti dello schema utente e di sistema). Le regole di contenuto DIT per le superclassi della classe di oggetti strutturale di una voce non sono applicabili a tale voce.
Le descrizioni delle regole di contenuto DIT sono scritte secondo la seguente ABNF:
DITContentRuleDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "AUX" SP oids ] ; auxiliary object classes
[ SP "MUST" SP oids ] ; attribute types
[ SP "MAY" SP oids ] ; attribute types
[ SP "NOT" SP oids ] ; attribute types
extensions WSP RPAREN ; extensions
dove:
MUST, MAY e NOT specificano, rispettivamente, gli elenchi dei tipi di
attributo la cui presenza è richiesta, consentita o esclusa nelle
voci soggette a questa regola di contenuto DIT; e
<extensions> descrive le estensioni.
4.1.7. Regole di struttura DIT e forme di nome
Talvolta è opportuno regolamentare la posizione in cui le voci oggetto e alias possono essere collocate nella DIT e il modo in cui possono essere denominate in base alla loro classe di oggetti strutturale.
4.1.7.1. Regole di struttura DIT
Una regola di struttura DIT è una «regola che disciplina la struttura della DIT specificando una relazione consentita tra voce superiore e voce subordinata. Una regola di struttura mette in relazione una forma di nome, e quindi una classe di oggetti strutturale, con regole di struttura superiori. Ciò consente alle voci della classe di oggetti strutturale identificata dalla forma di nome di esistere nella DIT come subordinate alle voci governate dalle regole di struttura superiori indicate» [X.501].
Le descrizioni delle regole di struttura DIT sono scritte secondo la seguente ABNF:
DITStructureRuleDescription = LPAREN WSP
ruleid ; rule identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "FORM" SP oid ; NameForm
[ SP "SUP" ruleids ] ; superior rules
extensions WSP RPAREN ; extensions
ruleids = ruleid / ( LPAREN WSP ruleidlist WSP RPAREN )
ruleidlist = ruleid *( SP ruleid )
ruleid = number
dove:
Se non è identificata alcuna regola superiore, la regola di struttura DIT si applica a un punto amministrativo autonomo (ad esempio, il vertice radice del sottoalbero controllato dal sottoschema) [X.501].
4.1.7.2. Forme di nome
Una forma di nome «specifica un RDN consentito per le voci di una particolare classe di oggetti strutturale. Una forma di nome identifica una classe di oggetti da denominare e uno o più tipi di attributo da usare per la denominazione (ossia, per l'RDN). Le forme di nome sono elementi primitivi della specifica utilizzati nella definizione delle regole di struttura DIT» [X.501].
Ogni forma di nome indica la classe di oggetti strutturale da denominare, un insieme di tipi di attributo richiesti e un insieme di tipi di attributo consentiti. Uno specifico tipo di attributo non può appartenere a entrambi gli insiemi.
Le voci governate dalla forma devono essere denominate usando un valore di ogni tipo di attributo richiesto e zero o più valori dei tipi di attributo consentiti.
Ogni forma di nome è identificata da un identificatore di oggetto (OID) e, facoltativamente, da uno o più nomi brevi (descrittori).
Le descrizioni delle forme di nome sono scritte secondo la seguente ABNF:
NameFormDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "OC" SP oid ; structural object class
SP "MUST" SP oids ; attribute types
[ SP "MAY" SP oids ] ; attribute types
extensions WSP RPAREN ; extensions
dove:
Tutti i tipi di attributo negli elenchi richiesto ("MUST") e consentito ("MAY") devono essere diversi.
4.2. Sottovoci di sottoschema
Le (sotto)voci di sottoschema sono utilizzate per amministrare le informazioni sullo schema della directory. Una singola (sotto)voce di sottoschema contiene tutte le definizioni dello schema (vedere la Sezione 4.1) utilizzate dalle voci in una determinata parte dell'albero della directory.
I server che seguono i modelli X.500(93) dovrebbero (SHOULD) implementare il sottoschema utilizzando i meccanismi di sottoschema X.500 (come descritto in dettaglio nella Sezione 12 di [X.501]); queste non sono quindi normali voci oggetto, bensì sottovoci (vedere la Sezione 3.2). I client LDAP non dovrebbero (SHOULD NOT) presumere che i server implementino qualsiasi altro aspetto del sottoschema X.500.
I server possono (MAY) consentire la modifica del sottoschema. Le procedure per la modifica del sottoschema sono descritte nella Sezione 14.5 di [X.501].
Un server che gestisce le copie master delle voci e consente ai client di modificarle deve (SHALL) implementare e fornire l'accesso a queste (sotto)voci di sottoschema, anche fornendo un attributo 'subschemaSubentry' in ogni voce modificabile. Ciò consente ai client di individuare gli attributi e le classi di oggetti la cui presenza è consentita. È fortemente raccomandato (RECOMMENDED) che anche tutti gli altri server implementino questa funzionalità.
Il valore dell'attributo 'subschemaSubentry' è il nome della (sotto)voce di sottoschema che contiene il sottoschema che governa la voce.
( 2.5.18.10 NAME 'subschemaSubentry'
EQUALITY distinguishedNameMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
SINGLE-VALUE NO-USER-MODIFICATION
USAGE directoryOperation )
La regola di corrispondenza 'distinguishedNameMatch' e la sintassi DistinguishedName (1.3.6.1.4.1.1466.115.121.1.12) sono definite in [RFC4517].
Il sottoschema è contenuto nelle (sotto)voci appartenenti alla classe di oggetti ausiliaria subschema.
( 2.5.20.1 NAME 'subschema' AUXILIARY
MAY ( dITStructureRules $ nameForms $ ditContentRules $
objectClasses $ attributeTypes $ matchingRules $
matchingRuleUse ) )
Nelle voci di sottoschema può essere presente anche l'attributo operativo 'ldapSyntaxes'.
I server possono (MAY) fornire attributi aggiuntivi (descritti in altri documenti) nelle (sotto)voci di sottoschema.
I server dovrebbero (SHOULD) fornire gli attributi 'createTimestamp' e 'modifyTimestamp' nelle (sotto)voci di sottoschema, per consentire ai client di mantenere le proprie cache di informazioni sullo schema.
Le sottosezioni seguenti forniscono le definizioni dei tipi di attributo per ciascun tipo di attributo di definizione dello schema.
4.2.1. 'objectClasses'
Questo attributo contiene le definizioni delle classi di oggetti.
( 2.5.21.6 NAME 'objectClasses'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.37
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e la sintassi ObjectClassDescription (1.3.6.1.4.1.1466.115.121.1.37) sono definiti in [RFC4517].
4.2.2. 'attributeTypes'
Questo attributo contiene le definizioni dei tipi di attributo.
( 2.5.21.5 NAME 'attributeTypes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.3
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e AttributeTypeDescription (1.3.6.1.4.1.1466.115.121.1.3) sono definiti in [RFC4517].
4.2.3. 'matchingRules'
Questo attributo contiene le definizioni delle regole di corrispondenza.
( 2.5.21.4 NAME 'matchingRules'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.30
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e MatchingRuleDescription (1.3.6.1.4.1.1466.115.121.1.30) sono definiti in [RFC4517].
4.2.4 'matchingRuleUse'
Questo attributo contiene le definizioni degli usi delle regole di corrispondenza.
( 2.5.21.8 NAME 'matchingRuleUse'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.31
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e MatchingRuleUseDescription (1.3.6.1.4.1.1466.115.121.1.31) sono definiti in [RFC4517].
4.2.5. 'ldapSyntaxes'
Questo attributo contiene le definizioni delle sintassi LDAP.
( 1.3.6.1.4.1.1466.101.120.16 NAME 'ldapSyntaxes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.54
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e SyntaxDescription (1.3.6.1.4.1.1466.115.121.1.54) sono definiti in [RFC4517].
4.2.6. 'dITContentRules'
Questo attributo elenca le regole di contenuto del DIT presenti nel sottoschema.
( 2.5.21.2 NAME 'dITContentRules'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.16
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e DITContentRuleDescription (1.3.6.1.4.1.1466.115.121.1.16) sono definiti in [RFC4517].
4.2.7. 'dITStructureRules'
Questo attributo elenca le regole di struttura del DIT presenti nel sottoschema.
( 2.5.21.1 NAME 'dITStructureRules'
EQUALITY integerFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.17
USAGE directoryOperation )
'integerFirstComponentMatch' e DITStructureRuleDescription (1.3.6.1.4.1.1466.115.121.1.17) sono definiti in [RFC4517].
4.2.8 'nameForms'
Questo attributo elenca le forme di nome in vigore.
( 2.5.21.7 NAME 'nameForms'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.35
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' e NameFormDescription (1.3.6.1.4.1.1466.115.121.1.35) sono definiti in [RFC4517].
4.3. Classe di oggetti 'extensibleObject'
La classe ausiliaria 'extensibleObject' consente alle voci che vi appartengono di contenere qualsiasi attributo utente. L’insieme dei tipi consentiti è implicitamente quello di tutti i tipi di attributo con uso userApplications.
( 1.3.6.1.4.1.1466.101.120.111 NAME 'extensibleObject'
SUP top AUXILIARY )
Gli attributi obbligatori delle altre classi della voce restano necessari e gli attributi esclusi restano vietati.
4.4. Individuazione del sottoschema
Per individuare il DN della (sotto)voce di sottoschema che contiene il sottoschema di controllo di una voce, il client legge il suo attributo operativo 'subschemaSubentry'. Per leggere gli attributi di schema, i client DEVONO (MUST) eseguire Search [RFC4511] con baseObject uguale al DN della (sotto)voce, scope uguale a baseObject, filter "(objectClass=subschema)" [RFC4515] e attributes contenente i nomi desiderati. Nota: il filtro "(objectClass=subschema)" permette ai server LDAP che fungono da gateway X.500 di rilevare la richiesta di informazioni di sottovoce.
I client NON DOVREBBERO (SHOULD NOT) presumere che un sottoschema pubblicato sia completo, che il server supporti tutti gli elementi pubblicati o che non supporti un elemento non pubblicato.