# Backend de sessions SQL

SQL session backend can be used with many SQL databases such as:

- MySQL
- PostgreSQL
- Oracle
- Informix
- Sybase
- ….

## Mise en marche

### Preparer la base de données

Il faut dédier une table pour héberger les sessions. Quelques exemples pour les serveurs principaux.

If your database doesn't accept UTF-8 characters in 'text' field, use 'blob' instead of 'text'.

#### MySQL

Créer une base de données si nécessaire :

    mysqladmin create lemonldapng

Créer la table des sessions :

    CREATE TABLE sessions (
        id CHAR(32) NOT NULL PRIMARY KEY,
        a_session text
        );

Change char(32) by char(64) if you use the now recommanded SHA256 hash algorithm. Voir Sessions pour plus de détails
You can change table name `sessions` to whatever you want, just adapt the parameter `TableName` in module options.

#### PostgreSQL

Créer un utilisateur et un rôle :

    su - postgres
    createuser lemonldap-ng -P

    Entrez le mot de passe pour le nouveau rôle : <PASSWORD>
    Entrez-le de nouveau : <PASSWORD>
    Le nouveau rôle est-il un super-utilisateur ? (o/n) n
    Le nouveau rôle doit-il être autorisé à créer des bases de données ? (o/n) n
    Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? (o/n) n

Créer la base de données :

    createdb -O lemonldap-ng lemonldap-ng

Créer la table:

    psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng

    Mot de passe pour l'utilisateur lemonldap-ng :
    [...]
    lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text );
    lemonldap-ng=> q

Change char(32) by char(64) if you use the now recommanded SHA256 hash algorithm. Voir Sessions pour plus de détails

### Manager

Aller dans le Manager et choisir le module de session (par exemple Apache::Session::Browseable::Postgres pour PostgreSQL) dans `Paramètres généraux` » `Sessions` » `Stockage des sessions` » `Module Apache::Session` et ajouter les paramètres suivants (sensible à la casse):

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
DataSource | La chaîne DBI | dbi:Pg:dbname=sessions;host=10.2.3.1
UserName | Le login de la base de données | lemonldapng
Mot-de-passe | Le mot de passe de la base de données | mysuperpassword
Commit | Requis pour PostgreSQL | 1
TableName | Name of the table | sessions

Il faut consulter la page de manuel correspondant à la base de données (Apache::Session::MySQL, …) pour connaître les paramètres. Il faut également installer le connecteur à la base de données (DBD::Oracle, DBD::Pg,…)

Pour MySQL, il faut ajouter quelques paramètres :

- LockDataSource
- LockUserName
- LockPassword

Si MySQL est choisi, lire comment augmenter les performances de MySQL.

## Sécurité

Restreindre l'accès réseau à la base de données.

On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres `globalStorage` et `globalStorageOptions` dans le fichier lemonldap-ng.ini.