> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.hodi.host/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Comment me connecter à ma base MySQL ou PostgreSQL depuis l'extérieur ?

Par défaut, vos bases de données MySQL et PostgreSQL n'acceptent que les connexions venant de votre hébergement. Une connexion depuis votre ordinateur, depuis un outil de BI ou depuis un autre serveur est refusée, quel que soit le mot de passe. C'est volontaire : une base ouverte à tout Internet est l'un des moyens les plus rapides de perdre ses données.

Pour vous connecter depuis l'extérieur, vous déclarez l'adresse IP depuis laquelle vous vous connecterez. Cela prend une minute, et la même liste couvre **MySQL comme PostgreSQL**.

||| **Un accès s'applique à tout votre compte.** Une adresse déclarée ici ouvre **toutes les bases de votre compte**, MySQL comme PostgreSQL, à **tous** vos utilisateurs de bases. Il n'existe pas de réglage base par base. Un mot de passe valide reste évidemment nécessaire, mais ne déclarez que des adresses que vous maîtrisez et supprimez celles dont vous ne vous servez plus.

---

## Déclarer votre adresse IP

1. Dans cPanel, section **Bases de données**, ouvrez **Remote Database Access** (accès distant aux bases).
2. Dans **Ajouter un hôte d'accès**, saisissez l'**adresse IP publique** de la machine qui se connectera.
3. Ajoutez un commentaire (*bureau*, *mon portable*, *serveur Metabase*) pour la reconnaître plus tard.
4. Cliquez sur **Ajouter un hôte**.

L'accès s'ouvre en quelques secondes. Rien d'autre à configurer, et rien à nous demander.

**Une entrée que vous n'avez pas ajoutée ?** La liste contient souvent déjà une ou deux adresses. Ce sont celles de votre serveur, inscrites par cPanel pour que les sites qu'il héberge puissent joindre leurs bases. C'est normal, il n'y a pas lieu de s'en inquiéter. N'y touchez pas : les supprimer peut casser vos propres sites.

**Quelle adresse IP ?** L'adresse publique, pas le `192.168.x.x` ou `10.x.x.x` que voit votre machine. Ouvrez [hodi.host/ip](https://hodi.host/ip) **depuis la machine qui se connectera** : la page affiche l'adresse publique qu'elle présente à Internet, en IPv4 et en IPv6.

**Attention aux connexions de bureau et de domicile :** la plupart sont en IP dynamique, qui change de temps en temps, parfois à chaque redémarrage de la box. Le jour où votre connexion ne passe plus sans raison apparente, vérifiez d'abord votre IP : elle a probablement changé, et il suffit de déclarer la nouvelle.

Vous pouvez déclarer une plage avec le caractère générique `%`, par exemple `203.0.113.%` pour toute une classe C. Restez le plus précis possible : toutes les adresses de la plage déclarée peuvent atteindre vos bases.

---

## Se connecter à MySQL

| Paramètre | Valeur |
| ---- |
| Hôte | le nom d'hôte de votre serveur, par exemple `run1.hodi.host` |
| Port | `3306` |
| Base | `moncompte_mabase` |
| Utilisateur | `moncompte_monuser` |
| Mot de passe | celui que vous avez défini dans cPanel |

cPanel **préfixe** les noms de bases et d'utilisateurs avec le nom de votre compte. Une base créée sous le nom `mabase` s'appelle en réalité `moncompte_mabase`, et c'est ce nom complet qu'il faut saisir.

Depuis un terminal :

```
mysql -h run1.hodi.host -P 3306 -u moncompte_monuser -p moncompte_mabase
```

---

## Se connecter à PostgreSQL : le chiffrement est obligatoire

C'est le point qui piège tout le monde, alors autant le dire tout de suite : **PostgreSQL n'accepte les connexions distantes que chiffrées en TLS**. Un client qui se connecte en clair est refusé, même si votre adresse IP est correctement déclarée et votre mot de passe correct.

L'erreur ressemble à ceci, et l'indice se trouve tout à la fin de la ligne :

```
FATAL: no pg_hba.conf entry for host "203.0.113.10", user "moncompte_monuser",
database "moncompte_mabase", no encryption
```

`no encryption` signifie que votre client n'a pas négocié de TLS. Activez-le et la connexion passe.

| Paramètre | Valeur |
| ---- |
| Hôte | le nom d'hôte de votre serveur, par exemple `run1.hodi.host` |
| Port | `5432` |
| Base | `moncompte_mabase` |
| Utilisateur | `moncompte_monuser` |
| Mot de passe | celui que vous avez défini dans cPanel |
| Mode SSL | `require`, idéalement `verify-full` |

**Connectez-vous toujours par le nom d'hôte du serveur, celui qui se termine par `.hodi.host`.** Jamais par une adresse IP, ni par votre propre nom de domaine. Notre certificat est émis pour ce nom de serveur : `verify-full`, le mode qui vérifie réellement que vous parlez au bon serveur, ne fonctionne que si votre client s'y connecte par ce nom. Vous le trouverez dans cPanel, dans le panneau **Informations sur le serveur**.

Avec `psql` :

```
psql "host=run1.hodi.host port=5432 dbname=moncompte_mabase user=moncompte_monuser sslmode=verify-full"
```

Dans un client graphique (DBeaver, pgAdmin, TablePlus, DataGrip), les paramètres de connexion comportent un onglet **SSL** : cochez *Use SSL* et choisissez `require` ou `verify-full`.

Depuis votre code :

```
Node.js (pg)   ssl: { rejectUnauthorized: true }
Python         psycopg.connect(..., sslmode="verify-full")
PHP (PDO)      "pgsql:host=...;dbname=...;sslmode=verify-full"
```

Un dernier point utile : votre utilisateur PostgreSQL n'atteint que les bases de votre propre compte, et uniquement celles qui lui ont été attribuées dans cPanel.

---

## Quand tout ceci ne sert à rien

Une application **hébergée chez nous** parle à sa base en local, via `localhost`. Elle n'a besoin d'aucun accès distant, et lui en donner un ne ferait qu'élargir la surface exposée pour rien.

De même, pour importer un dump, lancer une requête ou consulter une table de temps en temps, **phpMyAdmin** et **phpPgAdmin** sont disponibles directement dans cPanel, sans rien configurer.

L'accès distant sert à ce qu'ils ne savent pas faire : votre client de base de données sur votre machine, un outil de BI ou de reporting, une migration, une application externe.

---

## Bonnes pratiques

* Donnez à vos utilisateurs de base un mot de passe **long et unique**, différent de votre mot de passe cPanel.
* Déclarez **une IP fixe** plutôt qu'une plage large dès que c'est possible.
* **Supprimez** les hôtes que vous n'utilisez plus. On oublie facilement cette liste, et une vieille entrée reste valable.
* Ne mettez jamais vos identifiants de base dans du code envoyé au navigateur.

---

## Si cela ne fonctionne pas

| Ce que vous voyez | Ce que cela veut dire en général |
| ---- |
| Timeout, ou connexion refusée | Votre IP n'est pas déclarée, ou elle a changé depuis |
| PostgreSQL : `no encryption` | Votre client n'utilise pas SSL, voir la section ci-dessus |
| PostgreSQL : échec de vérification du certificat | Vous vous connectez par adresse IP au lieu du nom d'hôte |
| `password authentication failed` | Il manque le préfixe du compte au nom d'utilisateur, `moncompte_monuser` |
| La base existe mais vous ne la voyez pas | L'utilisateur n'est pas rattaché à cette base dans cPanel |

Toujours bloqué ? Ouvrez un ticket avec le message d'erreur exact et l'adresse IP depuis laquelle vous vous connectez, nous regarderons cela avec vous.
