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
Ajouter un commentaire