Installation de auf-django-users sur une base de données NSS existante

La procédure que je vais décrire (ainsi que les commandes SQL) est quasiment exactement ce qu'il faut faire pour installer auf-django-users sur le modèle de base de données décrit ici : http://wiki.auf.org/wikiteki/AuthentificationCentralis%C3%A9e/NssMysql. On part de l'ancien modèle de Nss qui est existe déjà dans plusieurs implantations.

L'idée générale est de ramener la base de données dans un schéma tel que l'application auf-django-users puisse en gérer les utilisateurs qui se trouvent dans la table users.

Commençons par installer les paquets necessaires

Rajoutons cette ligne dans /etc/apt/sources.list :

deb http://apt.auf.org lenny auf

Puis installons successivement : apache2, auf-keyring, auf-django-users, libapache2-mod-wsgi.

Tapons les commandes SQL necessaires

Je suppose que la base de données s'appelle authnss, que l'utilisateur à configurer dans l'appli sera django et que son mot de passe sera sabata et qu'il se connectera depuis la machine elle même 127.0.0.1.

Et ça donne ça :

// Création de l'utilisateur qui accèdera à la base de données
mysql> grant
    -> select, insert, update, delete, create, drop, alter, index
    -> on authnss.*
    -> to django@127.0.0.1
    -> identified by "sabata";

// Ajout de la colonne source : Les utilisateurs locaux auront LOCAL comme source
// L'appli ne gèrera que les comptes locaux
mysql> alter table users 
    -> add column  source 
    -> varchar(15) 
    -> default 'LOCAL'         
    -> not null; 

// Ajout d'une date de création
mysql> alter table users 
    -> add column creation datetime 
    -> default "1970/01/01" 
    ->  not null ; 

// Ajout d'une date de modification
mysql> alter table users 
    -> add column modification 
    -> datetime 
    -> default "1970/01/01"; 

// Préparation à la suppression de la clé primaire uid
mysql>  ALTER TABLE users MODIFY uid int(11) NOT NULL UNIQUE;

// On remplit les champs de création et de modification à partir de maintenant pour tous les comptes (un point de départ)
mysql> update users 
    -> set creation = now() , modification = now() 
    -> where uid <> 'quelquechose'; 

// Tous les utilisateurs étant locaux, on met la source à LOCAL
mysql> update users 
    -> set source = 'LOCAL' 
    -> where source <> 'LOCAL'; 

// gid est un entier int10
mysql> alter table users 
    -> modify column gid 
    -> int(10) 
    -> not null default 10000; 

// gid à 10000 pour tout le monde : un groupe users sera créé par la suite avec gid 10000
mysql> update users 
    -> set gid = 10000 
    -> where gid <> 10000 ; 

// Voilà ! Création du groupe users gid 10000
mysql> insert into groups
    -> values ('users','x','10000');

// Changement du champ rowid en id : on utilise plutôt id dans auf-django-users
mysql> alter table grouplist 
    -> change rowid id 
    -> int(10) auto_increment ; 

// Changement de clé primaire : username devient la clé
mysql>  ALTER TABLE users DROP PRIMARY KEY, ADD PRIMARY KEY(username);

// On augmente la taille de username dans grouplist
mysql>  ALTER TABLE grouplist modify username varchar(128) NOT NULL; 

FIN des commandes SQL

Configuration de auf-django-users et lancement

# vi /etc/auf-django-users/conf.py

DATABASE_ENGINE = 'mysql'    # parce que nous avons une base de données mysql
DATABASE_NAME = 'authnss'    # parce que notre base de donées s'appelle authnss
DATABASE_USER = 'django'             # L'utilisateur qui a reçu les droits necessaires
DATABASE_PASSWORD = 'sabata'         # Son mot de passe
DATABASE_HOST = '127.0.0.1'          # L'IP du serveur qui a la base de données

Rien d'autre ne change dans le fichier à ce stade

# auf-django-users-manage.py syncdb Puis repondre aux questions qui sont posées : l'administrateur de django-users, son email, son mot de passe, ... Si on a des erreurs à ce niveau, c'est que nous avons raté quelque chose dans ce qui est fait plus haut, lire correctement les erreurs et faire le changement qu'il faut dans la base de données à l'aide d'une requête SQL en se basant sur les commandes SQL plus haut.

Puis ajoutons cette ligne dans un virtualhost :  Include /etc/auf-django-users/apache.conf 

# apache2ctl graceful # Puis accédons à notre page web avec le nom donné dans le virtualhost.

Cas d'erreur

On rencontre dans certains cas d'utilisation de l'appli des erreurs du genre data truncated ou des trucs qui parlent de lignes trop longues ... Ce type d'erreur est plutôt lié à la base de données mysql et non à django. Il faut donc encore taper quelques SQL pour corriger :

mysql> alter table auth_group default character set utf8;
mysql> alter table auth_group_permissions default character set utf8;
mysql> alter table auth_message default character set utf8;
mysql> alter table auth_premission default character set utf8;
mysql> alter table auth_user default character set utf8;
mysql> alter table auth_user_groups default character set utf8;
mysql> alter table auth_user_user_permissions default character set utf8;
mysql> alter table django_admin_log default character set utf8;
mysql> alter table django_content_type default character set utf8;
mysql> alter table django_session default character set utf8;

Puis refaire le syncdb (auf-django-users-manage.py syncdb) et le rechargement de apache.

Cas de base de données un peu plus sophistiquées

En général, la différence se situe au niveau du champ id_noyau qui existe au niveau de la table users. Il faut donc transformer id_noyau en source comme ceci :

mysql> alter table users 
    -> change column id_noyau  source 
    -> varchar(15) 
    -> default 'LOCAL'         
    -> not null; 

Puis, il n'y a pas qu'une seule source qui est locale, mais plusieurs.

En générale :

Ce qui donne les requêtes suivantes :

mysql> update users
    -> set source = 'LOCAL'
    -> where source = -1;

mysql> update users set source = 'AUF' where source = -2;

mysql> update users set source = 'Autre' where source <> 'AUF' and source <> 'LOCAL';

Les autres requêtes qui ne portent pas sur source ne changent pas, elles sont les mêmes que celles déjà écrites plus haut.

Pour les plus curieux

Vous pouvez voir dans ce répertoire : /usr/share/python-support/auf-django-users/aufusers et écrire vos propres contrib ; update-python-modules auf-django-users pour valider les modifs.

ZAO/InstallDjangoUsers (dernière édition le 2009-08-24 15:14:19 par RogerYerbanga)