Aller au contenu

Connexion d'un entrepôt MySQL / MariaDB

Ce guide vous accompagne dans la connexion d’une base MySQL ou MariaDB à Saiku Cloud, de bout en bout. Cinq minutes si votre entrepôt est déjà public ; dix si vous devez créer un utilisateur en lecture seule.

Impact niveau : chaque niveau Saiku Cloud (Starter, Team, Business) prend en charge BYOC MySQL.

Pilote : Saiku Cloud embarque MariaDB Connector/J, qui parle les deux protocoles wire MySQL et MariaDB. Vous pouvez coller soit jdbc:mysql://... soit jdbc:mariadb://... et nous gérons le reste.

Ce dont vous aurez besoin

  • Une instance MySQL 5.7+ ou MariaDB 10.3+ joignable depuis une adresse IPv4 publique. Les clients Saiku Cloud hébergé sur Starter/Team/Business en ont besoin — les clients Enterprise utilisant un peering VPC privé obtiennent à la place une joignabilité réseau privé.
  • Un accès admin à votre entrepôt pour créer un utilisateur en lecture seule (ou les identifiants d’un utilisateur existant en lecture seule).
  • Cinq minutes.

Étape 1 — Autoriser notre IP de sortie

Les requêtes de Saiku Cloud vers votre entrepôt proviennent toutes d’une unique IP statique :

87.99.153.244

Ajoutez ceci au pare-feu / security group / allowlist réseau de votre entrepôt avant de tester la connexion. Emplacements d’allowlist courants :

  • AWS RDS / Aurora MySQL : règle entrante du security group VPC → port 3306 → source 87.99.153.244/32.
  • Google Cloud SQL : Connectivity → Authorized networks → ajoutez 87.99.153.244/32.
  • Azure Database for MySQL : Networking → Firewall rules → ajoutez une règle autorisant 87.99.153.244 à 87.99.153.244.
  • PlanetScale : Allowed IPs dans les paramètres de la base → ajoutez 87.99.153.244. PlanetScale requiert également ?sslMode=VERIFY_IDENTITY sur l’URL JDBC — voir l’étape 3.
  • Auto-hébergé : bind-address = 0.0.0.0 (ou votre NIC public) dans my.cnf, la règle de pare-feu public en façade, et un pattern de grant au niveau hôte qui autorise le rôle depuis 87.99.153.244.

L’IP est stable — elle survit aux redémarrages et reconstructions d’image. Nous nous engageons à un préavis d’au moins 30 jours avant toute rotation. Politique complète : notre engagement de stabilité de l’IP de sortie.

Étape 2 — Créer un utilisateur en lecture seule dans MySQL

Saiku Cloud ne lit que votre entrepôt — jamais d’écriture, jamais d’altération de schemas, jamais de création d’objets. La forme à privilège minimum est un utilisateur dédié en lecture seule :

-- As a MySQL user with the GRANT OPTION privilege:
CREATE USER 'saiku_read'@'%' IDENTIFIED BY 'pick-something-strong-here';
-- Grant SELECT on the database(s) you want Saiku to see. Adjust
-- 'analytics' to the database name in your JDBC URL.
GRANT SELECT ON analytics.* TO 'saiku_read'@'%';
-- Reload the privilege tables.
FLUSH PRIVILEGES;

Quelques notes :

  • Le wildcard d’hôte '%' permet à l’utilisateur de se connecter depuis n’importe quelle IP. Si votre MySQL est verrouillé à des IP sources spécifiques au niveau utilisateur (en plus du pare-feu), utilisez 'saiku_read'@'87.99.153.244' à la place.
  • Si vos données sont réparties sur plusieurs bases, répétez le bloc GRANT SELECT pour chacune.
  • Aurora MySQL traite les grants un peu différemment — voir la doc Aurora pour la recette équivalente.
  • PlanetScale utilise son propre système de rôles — créez un rôle « read-only » dans la console PlanetScale et récupérez le nom d’utilisateur + mot de passe générés au lieu d’exécuter CREATE USER.

Étape 3 — Construire l’URL JDBC

La forme :

jdbc:mysql://<host>:<port>/<database>?sslMode=REQUIRED&serverTimezone=UTC

Deux paramètres à comprendre (le placeholder de l’assistant inclut les deux) :

serverTimezone=UTC

sslMode=REQUIRED

Force TLS pour la connexion JDBC. La plupart des services MySQL managés imposent TLS côté serveur de toute façon ; REQUIRED fait que le client rejette le repli en texte clair.

Variantes :

  • sslMode=REQUIRED — le certificat du serveur est trusté mais pas vérifié pour le hostname. Bon défaut.
  • sslMode=VERIFY_CA — vérifie que le certificat du serveur remonte à une CA que nous trustons. Fonctionne pour les services managés utilisant des CA publiques.
  • sslMode=VERIFY_IDENTITY — vérifie également que le hostname du certificat serveur correspond à l’hôte de l’URL JDBC. Requis pour PlanetScale.
  • sslMode=DISABLED — texte clair. À éviter.

Exemples concrets

  • AWS RDS MySQL : jdbc:mysql://mydb.abc123.us-east-1.rds.amazonaws.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC
  • Aurora MySQL : Même forme ; utilisez le cluster writer endpoint.
  • Google Cloud SQL : jdbc:mysql://1.2.3.4:3306/sales?sslMode=REQUIRED&serverTimezone=UTC (utilisez l’IP publique de la console Cloud SQL)
  • Azure Database for MySQL : jdbc:mysql://mydb.mysql.database.azure.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC
  • PlanetScale : jdbc:mysql://aws.connect.psdb.cloud:3306/analytics?sslMode=VERIFY_IDENTITY&serverTimezone=UTC
  • MariaDB : Utilisez jdbc:mariadb://... si votre service utilise des paramètres d’URL spécifiques à MariaDB ; sinon jdbc:mysql:// fonctionne aussi contre MariaDB.
  • MySQL/MariaDB auto-hébergé : jdbc:mysql://db.yourcompany.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC

Étape 4 — Connectez-vous via l’assistant Saiku Cloud

  1. Connectez-vous à https://cloud.saiku.bi/.

  2. Naviguez vers Connexions dans la barre latérale gauche.

  3. Sous 1. Choisir le type d’entrepôt, cliquez sur la tuile MySQL / MariaDB.

  4. Renseignez :

    • URL JDBC — l’URL de l’étape 3.
    • Nom d’utilisateursaiku_read (ou le nom que vous avez donné à l’utilisateur à l’étape 2).
    • Mot de passe — le mot de passe de l’étape 2.
  5. Cliquez sur Tester la connexion.

Si tout est branché correctement, vous verrez une bannière de résultat verte : ✓ Connection successful plus la version MySQL/MariaDB détectée. Passez à l’étape 5.

Si vous voyez une bannière de résultat rouge, voir Dépannage ci-dessous.

Étape 5 — Enregistrer la connexion

Après un test réussi, l’assistant affiche une section 3. Enregistrer la connexion. Renseignez :

  • Mot de passe (ressaisir pour enregistrer) — le même mot de passe que pour le test. Nous ne stockons pas le mot de passe du formulaire de test pour éviter de faire transiter un identifiant via l’état de la page.
  • Libellé — un nom lisible comme Entrepôt de production ou Analytique marketing. Affiché dans la liste des connexions + le concepteur de cubes.

Cliquez sur Enregistrer la connexion. Nous vous redirigerons vers le schema designer.

Dépannage

✗ Connection failed (HOST_UNREACHABLE) ou (TIMEOUT)

Nous n’avons pas pu atteindre l’hôte sur le port spécifié. Causes les plus courantes :

  1. Pare-feu / allowlist — l’étape 1 n’a pas été faite ou ne l’a pas été pour la bonne IP. Confirmez que 87.99.153.244/32 est dans l’allowlist de votre entrepôt + appliquée.
  2. DNS — le hostname dans l’URL JDBC ne résout pas, ou résout vers une IP privée. Vérifiez depuis votre laptop : nslookup <host>. Nous refusons de nous connecter aux adresses RFC1918 / loopback / link-local pour des raisons de protection SSRF — HOST_DENIED (et non HOST_UNREACHABLE) est la surface dans ce cas.
  3. Mauvais port — MySQL est par défaut sur 3306. Certains services managés utilisent un port personnalisé (l’endpoint primaire de PlanetScale est 3306, mais certaines régions placent un load-balancer sur 443 — vérifiez la page des connection-strings dans leur console).

✗ Connection failed (AUTH_FAILED)

Erreur MySQL 1045 — le nom d’utilisateur ou le mot de passe est incorrect. L’assistant ne distingue intentionnellement pas « mauvais utilisateur » de « mauvais mot de passe » — c’est une défense contre les attaques de credential-stuffing.

  • Vérifiez le nom d’utilisateur. Les noms d’utilisateur MySQL SONT sensibles à la casse dans les configurations standard.
  • Confirmez que l’utilisateur est autorisé depuis '%' ou spécifiquement depuis '87.99.153.244'. La forme la plus courante de cet échec : CREATE USER 'saiku_read'@'localhost' n’autorise que les connexions locales ; Saiku Cloud se connecte depuis 87.99.153.244, qui ne correspond pas à localhost.
  • Essayez de vous connecter depuis votre laptop avec mysql -h <host> -u saiku_read -p <database> pour confirmer que les identifiants fonctionnent hors de Saiku.

✗ Connection failed (DATABASE_NOT_FOUND)

Erreur MySQL 1049 — l’hôte accepte vos identifiants mais le nom de base de données dans l’URL JDBC n’existe pas. Vérifiez :

-- From mysql CLI, as any user with login:
SHOW DATABASES;

Les timestamps sont décalés d’un nombre étrange d’heures après l’import

Vous avez oublié serverTimezone=UTC. Ajoutez-le à l’URL JDBC (étape 3), testez, enregistrez. Les cubes existants construits contre l’ancien (mauvais) timezone devront être re-rendus.

Le cube s’affiche mais avec 'NULL' (littéral de chaîne) au lieu de vrais NULL

Votre MySQL est en mode SQL ANSI + le XML de schema a nullValue="" configuré. Soit :

Toute autre chose

Faites une capture d’écran de l’assistant avec la bannière de résultat rouge visible (en particulier la ligne Kind: ...) et envoyez-la à support@saiku.bi.

Enterprise : réseau privé

Pour les clients Enterprise utilisant une configuration de réseau privé, la règle d’IP de sortie est remplacée par un peering VPC ou PrivateLink vers votre instance MySQL. Le flux de l’assistant de connexion est par ailleurs identique. Contactez votre équipe de compte pour provisionner le peering.

Essayer avec FoodMart

Vous voulez tester Saiku Cloud avec ce dialecte avant de connecter vos propres données ? Téléchargez le jeu de données d’exemple FoodMart packagé pour MySQL :

Jeu de données d’exemple FoodMart pour MySQL