Jump to content

Manuel:Base de données partagée

From mediawiki.org
This page is a translated version of the page Manual:Shared database and the translation is 100% complete.

Cette page fournit un bref aperçu sur l'utilisation des bases de données partagées dans MediaWiki. La plupart des informations présentes ici devraient fonctionner avec une installation simple de MediaWiki (sans extensions). Toute contrainte des extensions est notée. Notez que cela est conçu autour des bases de données MySQL. La prise en charge de SQLite a été ajoutée en MediaWiki 1.17. La prise en charge de PostgreSQL a été ajoutée en MediaWiki 1.19. Les autres moteurs de bases de données peuvent ne pas prendre en charge les bases de données partagées de cette manière.

Attention ! Attention : Ce guide suppose soit que vous commencer votre wiki à partir de rien, ou que vous passez d'une configuration à un wiki, à plusieurs. Ceci ne couvre pas la fusion des tables user ni le paramètrage dans le style Wikimedia (c'est à dire avec une table globale user et des tables user locales) en utilisant CentralAuth .
Attention ! Attention : Renameuser n'est pas compatible actuellement avec $wgSharedDB. Voir phab:T104830.

Bases

Les bases de données partagées sont configurées par 3 Configuration variables globales principales dans votre fichier LocalSettings.php :

Toutes ne vous sont pas forcément nécessaires, cela dépend de vos besoins et de votre environnement.

La configuration la plus simple : une table user partagée

Une table partagée user peut être utilisée si vous avez plusieurs wikis se partageant l'enregistrement des utilisateurs, de sorte que ces derniers n'aient à se connecter qu'à un seul wiki.

$wgSharedDB = 'mainwiki'; # $wgDBname de la base de données du wiki qui contient la table utilisateurs principale
$wgSharedTables[] = 'actor';
$wgSharedPrefix = 'm_'; # $wgDBprefix pour la base de données. Par défaut, le préfixe du wiki actuel si non spécifié

Par défaut, $wgSharedTables contient les tables user et user_properties. Pour les wikis qui ont été créés pour la première fois après MediaWiki 1.35, cela comprend aussi la table actor.

Si vous avez deux wikis et que vous créez des utilisateurs différents sur chacun d'eux, et qu'ensuite vous commencez à partager la table actor, cela ne fonctionnera pas car le userId référencé dans la table locale actor n'est pas le même identifiant d'utilisateur que celui référencé dans la table partagée actor. Cela se termine en créant la confusion et en corrompant les données à plusieurs endroits et d'une manière plus ou moins subtile. Malheureusement il y a aussi un bogue qui fait échouer la connexion des nouveaux utilisateurs sur les wikis où les tables des utilisateurs sont partagées et les tables des acteurs sont séparées.
Suggestion : pour la raison évoquée ci-dessus, il est recommandé de partager les tables (en particulier les tables user) juste après avoir créé un nouveau wiki. Avant de créer les utilisateurs ou de faire des modifications.

Droits sur la base de données

L'utilisateur MySQL du wiki partagé doit avoir au moins les droits SELECT et UPDATE sur les tables user du wiki principal. Si vous avez différents utilisateurs MySQL pour chacun des wikis, vous devez ajouter des permissions supplémentaires à cellles de l'utilisateur du wiki partagé, comme indiqué dans la configuration $wgDBuser de ce wiki. Pour ceux qui utilisent un hébergement partagé, notez que ceci est possible pour quelques mais pas tous les fournisseurs. Vous pouvez réaliser cela avec des commandes MySQL similaires à :

grant select, update on mainwiki.user to 'sharedwikiuser'@'localhost';
grant select, update on mainwiki.user_properties to 'sharedwikiuser'@'localhost';

Cela permet à votre wiki de lire les utilisateurs dans la table principale, et de mettre à jour ces tables, ce qui arrive quand un utilisateur se connecte.

Partager les sessions

Pour les dernières informations à propos des sessions dans MediaWiki 1.27 et plus récent, voir SessionManager and AuthManager.

Pour partager des sessions de connexion entre vos wikis, initialisez $wgCookieDomain avec tous les sous-domaines qui se trouvent sous votre domaine racine. Par exemple, si vous disposez des sites en.example.com, fr.example.com et pool.example.com, déclarez :

$wgCookieDomain = '.example.com';

Mise à jour

Depuis MediaWiki 1.21, lors de la mise à jour de MediaWiki à partir de l'installateur web, $wgSharedTables doit être temporairement supprimé de LocalSettings.php pendant cette opération. Sinon les tables partagées ne seront pas du tout modifiées (ni les tables avec $wgSharedPrefix, ni celles avec $wgDBprefix), ce qui peut conduire à l'échec de la mise à jour.

Lorsque la mise à jour est faite à partir de la ligne de commande en exécutant le script update.php , il faut utiliser le paramètre --doshared pour mettre à jour les tables partagées.

Dans MediaWiki 1.24 le type par défaut du mot de passe qui était MD5 est devenu PBKDF2, et la valeur de hachage du mot de passe est mise à jour automatiquement lorsque l'utilisateur se connecte. Pour éviter que cela ne se produise avant que tous les wikis ne soient à jour, mettez $wgPasswordDefault à 'B' et supprimez-le partout une fois la mise à jour terminée, pour vous assurer qu'un cryptage plus fort est utilisé.

Partager davantage de tables

Vous pouvez partager d'autres tables que la table user, mais redoublez alors d'attention. Si une table contient des données spécifiques à un wiki, le partage peut poser problème. Notez-bien que chacune des sous-sections ici suppose que vous partagiez également la table user. Si vous devez ajouter d'autres tables, assurez-vous d'avoir complété le tableau ($var[] = 'value') ou inclus la table user dans la définition du nouveau tableau.

Table ipblocks

$wgSharedTables[] = 'ipblocks';

En partageant la table ipblocks vous pouvez obtenir des blocages globaux de sorte que le blocage sur un wiki bloque l'utilisateur ou l'adresse IP sur tous les autres wikis qui utilisent la base de données partagée.

Mises en garde

Il peut y avoir quelques problèmes mineurs quand la table ipblocks est partagée :

  • Le champ ipb_reason correspond au motif 'reason' dans Special:Block, lors du blocage d'un utilisateur. Quand un utilisateur bloqué voit le message «Vous êtes bloqué », ceci est analysé comme du wikicode et les liens sont analysés sur Special:BlockList, vous devrez vous assurer lorsque vous bloquez un utilisateur, que les messages ont un sens sur tous les wikis.
  • Les journaux des blocages ne sont pas partagés (il n'est pas recommandé de partager la table logging ).

Table user_groups

$wgSharedTables[] = 'user_groups';

En partageant la table user_groups vous aurez des groupes globaux d'utilisateurs.

Mises en garde

  • De la même manière que le journal des blocages, le journal des droits utilisateur n'est pas partagé.
  • Tous les groupes utilisateurs seront globaux. Vous pouvez contourner cela d'une certaine façon, en personnalisant vos groupes utilisateur. Par exemple pour séparer les administrateurs d'un wiki et d'un autre, vous pouvez faire par exemple :
Dans la configuration du wiki 1 :
$wgGroupPermissions['wiki1_admin'] = $wgGroupPermissions['sysop']; // copiez les droits sysop par défaut dans le nouveau groupe
unset($wgGroupPermissions['sysop']); // puis supprimer le groupe sysop par défaut
$wgGroupPermissions['wiki2_admin'] = array(); // n'attribuez pas aux admins des autres wikis des droits supplémentaires
Dans la configuration du wiki 2 :
$wgGroupPermissions['wiki2_admin'] = $wgGroupPermissions['sysop'];
unset($wgGroupPermissions['sysop']);
$wgGroupPermissions['wiki1_admin'] = array();
  • Pour éviter que les bureaucrates d'un wiki n'assignent à eux-même des droits qu'ils n'ont pas à avoir sur les autres wikis, vous pouvez créer une configuration similaire à celle ci-dessus, mais en supprimant les droits 'userrights' qui leurs permettent de définir un groupe quelconque et en utitisant $wgAddGroups /$wgRemoveGroups à la place.

Autres tables

Cette section couvre les autres tables pour lesquelles il y a moins de raisons communes à les partager, ainsi que les tables qui ne doivent pas être partagées.

  • La table interwiki contient principalament des données statiques; cela peut être utile à partager si vous avez plusieurs liaisons interwikis personnalisées.
  • La table site_stats peut éventuellement être partagée pour aggréger les données de tous vos wikis.
  • Par défaut, la table user_properties est incluse dans la liste des tables partagées. Si votre wiki a été créé avec MediaWiki 1.15 ou plus ancien vous devriez éventuellement garder ceci pour la compatibilité arrière, car les préférences de l'utilisateur seront migrées automatiquement sans préavis de la table user vers la table user_properties. Sinon vous pouvez supprimer ceci du tableau pour permettre aux utilisateurs d'avoir des préférences différentes sur chaque wiki (si cela est souhaité)

La plupart des autres tables ne doivent pas être partagées parce qu'elles contiennent des données spécifiques au wiki, typiquement les connexions aux pages via un pageId ou une combinaison espace de noms et titre. Ceci comprend (mais n'est pas limité à) :

  • Une table de liens quelconque (pagelinks, templatelinks, etc.)
  • La table page
  • La table revision
  • table image (pour disposer d'un dépôt de médias partagé, voir $wgForeignFileRepos )

Pour plus de détails, voir Manuel:Tables propices au partage

Voir aussi

  • Extension:CentralAuth - Une méthode différente pour avoir des tables user partagées. Utilisé par Wikimedia, et probablement l'option la plus facile pour fusionner des wikis déja installés.
  • Extension:GlobalBlocking - extension permettant de bloquer globalement des adresses IP, sans partager d'autres bases de données. Les droits pour bloquer globalement des utilisateurs sont indépendants de ceux nécessaires pour le 'block' normal.
  • Extension:GlobalUserrights - Extension qui autorise les groupes globaux d'utilisateurs et qui facilite leur gestion via Special:GlobalUserrights.