Partager les tables utilisateur d'un site avec plusieurs autres sites

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Mon objectif est de mettre en place plusieurs sites - avec la fonctionnalité multisites de Drupal - de sorte que les utilisateurs (login/pwd/rôles...) soient communs (partagés) à tous ces sites.

La solution Drupal pour implémenter ça est d'utiliser le préfixage de table. En gros : chaque site utilise ses propres tables sauf pour les tables utilisateur (sessions, users, authmap...) qui sont partagées entre tous les sites. Problème : pour que ça marche, tous les sites doivent être installés dans la même base de données et utiliser chacun un préfixe de table différent, ce qui peut vite devenir pas pratique s'il y a de nombreux sites.

Je voudrais donc arriver au même résultat, mais en utilisant différentes bases de données et en partageant uniquement certaines tables (les tables utilisateurs) entre ces bases.

Une solution serait de créer des Views MySQL pour les tables à partager, mais elle nécessite MySQL 5+, ce dont je ne dispose pas pour ce projet.

Connaissez-vous une autre solution ? (qui, en gros, reviendrait à synchroniser qq tables entre plusieurs BDD)

Version de Drupal : 

Je me demande s'il n'est pas possible d'utiliser un '.' à la fin d'un prefixe, pour spécifier une base de données. En Mysql, les requêtes doivent pouvoir être effectuées de manière transparente entre plusieurs bases de données, à condition que l'utilisateur ait les droits d'accès correspondants.

Un énoRRRRRRRRRRRRRme merci damz !!

C'est exactement ce qu'il me fallait. Tu peux effectivement utiliser les préfixes de Drupal comme des préfixes MySQL en écrivant le nom d'une base suivi d'un point.

Ce qui donne :

  • Dans le fichier settings.php de mon site "maître", rien de spécial.

  • Dans les fichiers settings.php de mes sites "esclave" :

    <?php
    $db_prefix
    = array(
     
    'default'        => '',
     
    'authmap'        => 'master.',
     
    'profile_fields' => 'master.',
     
    'profile_values' => 'master.',
     
    'role'           => 'master.',
     
    'sequences'      => 'master.',
     
    'sessions'       => 'master.',
     
    'users'          => 'master.',
     
    'users_roles'    => 'master.',
    );
    ?>

    Autrement dit, pour toutes les requêtes portant sur les tables listées ci-dessus, c'est la base appelée "master" qui est utilisée (comme dit damz, le user mysql doit avoir les permissions appropriées).