Indexation d'attributs sur IBM ITDS Directory Server

Cet article explique les actions à mener pour identifier puis indexer des attributs sur l'annuaire LDAP IBM Directory Server (ITDS / ISDS / IVDS, selon l'époque et le branding IBM).

Identification des attributs non indexés

On peut récupérer les informations dans le fichier ibmslapd.log :

grep indexed /path/to/log/ibmslapd.log
09/21/2022 08:51:41 AM GLPRDB091W Attribute eroperationnames is not indexed but is used in searches 10 times.
09/21/2022 10:14:32 AM GLPRDB091W Attribute eroperationnames is not indexed but is used in searches 10 times.
09/27/2022 11:25:50 AM GLPRDB091W Attribute erldapgroupbusinesscategory is not indexed but is used in searches 10 times.
09/27/2022 11:25:56 AM GLPRDB091W Attribute eroperationnames is not indexed but is used in searches 100 times.
09/28/2022 03:57:40 PM GLPRDB091W Attribute givenname is not indexed but is used in searches 10 times.

On voit ici que l'attribut eroperationnames a été utilisé dans 100 recherches (au moins), sans être indexé, et donc en provoquant un full scan des tables.

On peut regarder la configuration de la table dans DB2 :

db2 connect to idsldap

$ db2 describe table eroperationnames

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
EID                             SYSIBM    INTEGER                      4     0 No    
EROPERATIONNAMES                SYSIBM    VARCHAR                    240     0 No    
REROPERATIONNAMES               SYSIBM    VARCHAR                    240     0 Yes   

  3 record(s) selected.

On peut trouver l'OID de l'attribut dans le(s) fichier(s) décrivant le schéma :

grep -i eroperationnames V3.modifiedschema |grep SYNTAX
( 1.3.6.1.4.1.6054.1.1.155 NAME 'erOperationNames' DESC 'List of operations supported by Assemblyline' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

On cherche ensuite l'OID dans les mêmes fichiers

grep 1.3.6.1.4.1.6054.1.1.155 V3* | grep DBNAME

Si on n'a pas de résultat, l'attribut n'est pas indexé.

Ajout des index

L'ajout d'index se fait via un fichier LDIF, qui a la syntaxe suivante :

dn: cn=schema
changetype: modify
replace: attributetypes
attributetypes: ( <attr_oid>
NAME '<attr_name>'
DESC '<any_descriptive_text>'
# The superior oid is optional
SUP <superior_oid>
<matching_rule_and_oid> )
-
replace: ibmattributetypes
ibmattributetypes: ( <attr_oid>
DBNAME( '<DB2_table_name' '<DB2_column_name>' )
ACCESS-CLASS <access_class>
LENGTH <size_of_attribute_max_bytes>
EQUALITY )

Dans notre exemple, ce sera :

dn: cn=schema
changetype: modify
replace: attributetypes
attributetypes: ( 1.3.6.1.4.1.6054.1.1.155 NAME 'erOperationNames' DESC 'List of operations supported by Assemblyline' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 EQUALITY 2.5.13.2 SUBSTR 2.5.13.4 )
-
replace: ibmattributetypes
ibmattributetypes: ( 1.3.6.1.4.1.6054.1.1.155 DBNAME ('erOperationNames' 'erOperationNames') LENGTH 240 EQUALITY )

Les données sont ensuite intégrées dans l'annuaire :

ldapmodify -x -D "cn=root" -w secret -f /path/to/index_creation.ldif

IBM recommande ensuite de recalculer les statistiques :

idsrunstats -I idsldap
Catégorie

Ajouter un commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.