> For the complete documentation index, see [llms.txt](https://cleyrop.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cleyrop.gitbook.io/docs/v-4.5/gouvernance-de-donnees/sources-de-donnees.md).

# Sources de données

Les sources de données permettent d’ingérer, synchroniser et exposer les données de manière sécurisée, en assurant la traçabilité et la gouvernance des accès.

Deux grandes familles existent :

1. Les **Datasources externes,** qui permettent de connecter directement des systèmes de données (SQL, S3, API, Snowflake, etc.).
2. Les **Dépôts** : serveur SFTP sécurisés, utilisés pour les échanges de fichiers avec des partenaires externes.

***

## Datasources externes

Une Datasource est un objet représentant une source de données externe.

Elle contient toutes les informations nécessaires pour se connecter à cette source et récupérer les données dans un Dataset Cleyrop.

Chaque datasource utilise un connecteur spécifique, adapté au type de source.

### Création d'une datasource

L’ajout d’une datasource suit le même principe quel que soit le connecteur. Depuis le menu Sources données > Datasourcee :

1. Cliquez sur **Créer**
2. Sélectionnez le type de connecteur
3. Renseignez les informations de **connexion demandées** (URL, identifiants, clés, etc.)
4. **Testez** la connexion
5. Renseignez les méta-données : nom, description, **sensibilité**

Une fiche récapitulative est ensuite accessible pour chaque datasource :

* paramètres de connexion,
* liste des datasets importés,
* statut de connectivité.

{% hint style="success" %}
Pour chaque source de données, nous recommandons de créer un compte de service dédié avec les droits minimaux nécessaires.
{% endhint %}

### Paramètres de connexion par type de connecteur

#### 🗄️ Bases de données relationelles

Retrouvez ci-dessous les paramètres à renseigner pour configurer une datasource type Oracle / PostgreSQL / Microsoft SQL / MySQL.

<figure><img src="/files/kKTPEl3os5Xztt2pp7rV" alt=""><figcaption></figcaption></figure>

**Champs obligatoires**

<table><thead><tr><th width="157.328125">Champ</th><th width="264.0703125">Description</th><th>Exemple</th></tr></thead><tbody><tr><td>Host</td><td>Nom de domaine ou adresse IP du serveur de base de données.<br></td><td><code>db.mondomaine.com</code> ou <code>192.168.1.10</code><br>⚠️ <em>Ne pas inclure de protocole (ex: <code>jdbc:</code>) ni de port.</em></td></tr><tr><td>Port</td><td>Port réseau utilisé par la basePré-rempli selon le connecteur.</td><td>Oracle : 1521<br>PostgreSQL : 5432<br>SQL Server : 1433<br>MySQL : 3306</td></tr><tr><td>Database / SID / Service name</td><td>Nom de la base cible (ou SID pour Oracle).</td><td><code>production_db</code></td></tr><tr><td>Nom utilisateur</td><td>Compte ayant accès en lecture (recommandé : compte dédié).</td><td><code>cleyrop_reader</code></td></tr><tr><td>Mot de passe</td><td>Mot de passe associé.</td><td>—</td></tr></tbody></table>

**Bonnes pratiques et points d’attention**

* Vérifier que le serveur autorise les connexions depuis l’IP de Cleyrop (firewall / security group).
* Pour Oracle, le champ **Host** doit inclure le SID ou le Service Name si votre instance l'exige (ex : `monserveur.com/ORCL`).
* SQL Server peut nécessiter le nom d’instance (`host\instance`).
* Si la connexion échoue : vérifier SSL/TLS requis ou non.

#### ❄️ Snowflake

<figure><img src="/files/eBrJwNvyfPtfJI15oK0q" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="139.47265625">Champ</th><th width="315.19140625">Description</th><th>Exemple</th></tr></thead><tbody><tr><td>Host</td><td>Adresse de l’instance Snowflake au format (sans https://): <code>[account].snowflakecomputing.com</code></td><td><code>xy12345.snowflakecomputing.com</code></td></tr><tr><td>Warehouse</td><td>Entrepôt de calcul utilisé pour exécuter les requêtes.</td><td><code>COMPUTE_WH</code></td></tr><tr><td>Database</td><td>Base cible.</td><td><code>ANALYTICS_DB</code></td></tr><tr><td>Nom d'utilisateur</td><td>Compte de service.</td><td><code>CLEYROP_USER</code></td></tr><tr><td>Mot de passe</td><td>Mot de passe ou clé privée.</td><td>—</td></tr><tr><td>Rôle (optionnel)</td><td>Rôle Snowflake à utiliser.</td><td><code>ANALYST_ROLE</code></td></tr></tbody></table>

**Bonnes pratiques et points d’attention**

* Utiliser un rôle dédié avec :
  * `USAGE` sur warehouse
  * `USAGE` sur database & schema
  * `SELECT` sur tables
* Si aucun rôle n’est renseigné → rôle par défaut utilisé (souvent source d’erreur d’accès).
* Retrouvez votre host dans les détails de votre compte : Account/Server URL

#### 🔌 **API**

<figure><img src="/files/YCpKbvwsyxEeUiTOkD1C" alt=""><figcaption></figcaption></figure>

**Champs**

| Champ                     | Description                                                                            | Exemple                      |
| ------------------------- | -------------------------------------------------------------------------------------- | ---------------------------- |
| Base URL                  | URL racine de l’API (sans endpoint spécifique).                                        | `https://api.mondomaine.com` |
| Endpoint (fin d’URL)      | Chemin utilisé pour tester la connexion.                                               | `/v1/users`                  |
| Paramètres (Query Params) | Paramètres ajoutés à l’URL pour filtrer ou préciser la requête.                        | `?limit=100&status=active`   |
| En-têtes (Headers)        | Informations techniques envoyées avec chaque requête (authentification, format, etc.). | `Authorization: Bearer xxx`  |

{% hint style="info" %}
Les paramètres et en-têtes sont optionnels mais peuvent être requis si votre API nécessite une authentification ou des filtres spécifiques.
{% endhint %}

**Méthodes HTTP**

Le connecteur API supporte plusieurs méthodes HTTP :

<table><thead><tr><th width="224.92578125">Méthode</th><th>Usage</th></tr></thead><tbody><tr><td><strong>GET</strong></td><td>Récupérer des données (comportement par défaut)</td></tr><tr><td><strong>POST</strong></td><td>Envoyer des données dans le corps de la requête</td></tr><tr><td><strong>PUT</strong></td><td>Mettre à jour une ressource complète</td></tr><tr><td><strong>PATCH</strong></td><td>Mettre à jour partiellement une ressource</td></tr></tbody></table>

Pour les méthodes POST, PUT et PATCH, un **corps de requête (body)** peut être configuré sous forme de paires clé / valeur (format JSON).

> ℹ️ Les paramètres définis dans la Datasource peuvent être surchargés au niveau du Dataset. La valeur du Dataset est alors prioritaire sur celle de la Datasource.

**Authentification par token**

Si votre API requiert une authentification par token, activez l'option **Activer l'authentification par token** dans la section dédiée.

<figure><img src="/files/aseprZmEKuO4rMF2pAeE" alt=""><figcaption></figcaption></figure>

**Requête du token :**

| Champ                                  | Description                                          | Exemple                               |
| -------------------------------------- | ---------------------------------------------------- | ------------------------------------- |
| **URL du token**                       | URL de l'endpoint d'authentification                 | `https://api.example.com/oauth/token` |
| **Méthode HTTP**                       | Méthode utilisée pour récupérer le token             | `POST`                                |
| **Propriété du token dans la réponse** | Nom du champ contenant le token dans la réponse JSON | `access_token`                        |

Vous pouvez également configurer :

* **Paramètres** : paramètres à envoyer dans la requête de token (ex: `grant_type: client_credentials`)
* **En-têtes** : en-têtes à envoyer dans la requête de token (ex: `Content-Type: application/x-www-form-urlencoded`)
* **Corps** : paires clé/valeur JSON à envoyer dans le corps de la requête de token

**Injection du token :**

Une fois récupéré, le token est automatiquement injecté dans les appels à l'API. Configurez :

| Champ                       | Description                          | Exemple                 |
| --------------------------- | ------------------------------------ | ----------------------- |
| **Cible d'injection**       | Où injecter le token dans la requête | `En-tête`               |
| **Nom de la propriété**     | Nom du header ou paramètre cible     | `Authorization`         |
| **Pattern de la propriété** | Format d'injection du token          | `Bearer {ACCESS_TOKEN}` |

> ℹ️ Le token est récupéré automatiquement avant chaque collecte et injecté dans les appels selon la configuration définie.

#### 🔌 **API - Business central**

**Configuration préalable dans Microsoft Entra ID (Azure AD)**

Avant de configurer la datasource, assurez-vous d'avoir complété ces étapes clés dans le portail Azure pour permettre une connexion de type automate (S2S) :

* Inscription d'application : Créez une application et notez le Client ID (`6df8717c...`) et le Tenant ID.
* Redirect URI : Ajoutez `https://businesscentral.dynamics.com/OAuthLanding.htm` dans l'onglet Authentication.
* Permissions API : Ajoutez les permissions de type Application (et non Delegated) pour *Dynamics 365 Business Central* (`API.ReadWrite.All`).
* Consentement Admin : Cliquez sur Grant admin consent for \[Votre Entreprise] (indispensable pour obtenir la coche verte).
* Secret Client : Créez un Client Secret dans *Certificates & secrets* et copiez sa valeur.

<figure><img src="/files/lr4BsWYwMzWxg3R3WPt5" alt=""><figcaption></figcaption></figure>

**Champs**

<table><thead><tr><th>Champ</th><th>Description</th><th width="314.4296875">Exemple</th></tr></thead><tbody><tr><td>Base URL</td><td>URL racine de l’API (sans endpoint spécifique).</td><td><a href="https://api.businesscentral.dynamics.com/v2.0/production/api/v2.0"><code>https://api.businesscentral.dynamics.com/v2.0/production/api/v2.0</code></a></td></tr><tr><td>Endpoint (fin d’URL)</td><td>Chemin utilisé pour tester la connexion.</td><td><code>/companies</code></td></tr><tr><td>Paramètres (Query Params)</td><td>Paramètres ajoutés à l’URL pour filtrer ou préciser la requête.</td><td><code>?$top=10&#x26;$select=id,displayName</code></td></tr></tbody></table>

Permettre l'**authentification Token** :

Dans votre interface de connexion, remplissez les champs comme suit pour établir la liaison OAuth2 :

<figure><img src="/files/eoq2ziOonzD2BvTfkJzV" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th>Champ</th><th>Description</th><th width="458.90234375">Exemple</th></tr></thead><tbody><tr><td>Token URL</td><td>URL d'authentification Microsoft avec votre Tenant ID.</td><td><code>https://login.microsoftonline.com/</code><strong><code>[TENANT_ID]</code></strong><code>/oauth2/v2.0/token</code></td></tr><tr><td>Token property</td><td>Nom de la propriété contenant le jeton dans la réponse JSON.</td><td><code>access_token</code></td></tr><tr><td>client_id</td><td>L'identifiant unique de votre application Azure.</td><td><code>xxxx-xxxx-xxxx-xxxx-xxxx</code></td></tr><tr><td>client_secret</td><td>La valeur du secret générée dans Azure.</td><td><em>Votre_Secret_Client</em></td></tr><tr><td>scope</td><td>Le périmètre d'accès requis pour Business Central.</td><td><code>https://api.businesscentral.dynamics.com/.default</code></td></tr><tr><td>grant_type</td><td>Type d'autorisation pour un accès automatisé (S2S).</td><td><code>client_credentials</code></td></tr></tbody></table>

**Test de connexion** :

* Utilisez l'endpoint `/companies` pour valider que le connecteur arrive à lire la liste des sociétés disponibles.

#### ☁️ **S3**

<figure><img src="/files/wRQPl7hdmmhoix48gsYj" alt=""><figcaption></figcaption></figure>

| Champ               | Description              | Exemple                              |
| ------------------- | ------------------------ | ------------------------------------ |
| **URL**             | Endpoint du service S3.  | `https://s3.eu-west-1.amazonaws.com` |
| **Région**          | Région AWS du bucket.    | `eu-west-1`                          |
| **Access Key**      | Clé d’accès IAM.         | `AKIA...`                            |
| **Secret Key**      | Clé secrète associée.    | —                                    |
| **Bucket**          | Nom du bucket cible.     | `data-production`                    |
| **Chemin (prefix)** | Sous-dossier spécifique. | `exports/2025/`                      |

#### Héritage de sensibilité

{% hint style="danger" %}
Le **choix de la sensibilité** est crucial car les enfants de la Datasource en hériteront.
{% endhint %}

Lorsqu’un Dataset est créé à partir d’une datasource, il hérite automatiquement du niveau de sensibilité de sa source. Lorsqu’un Dataset est créé à partir de plusieurs datasources, le maximum de la sensibilité sera pris.

| Sensibilité des datasource     | Sensibilité du dataset créé |
| ------------------------------ | --------------------------- |
| Interne & Interne              | Interne                     |
| Sensible & Interne             | Sensible                    |
| Restreint & Sensible & Interne | Restreint                   |

### Supervision et états de connectivité

Chaque datasource dispose d’un état de connectivité visible dans le panneau d’administration :

<table><thead><tr><th width="172.56640625">État</th><th>Signification</th></tr></thead><tbody><tr><td>✅ Valide</td><td>Les 5 derniers rafraîchissements se sont déroulés sans erreur.</td></tr><tr><td>⚠️ À surveiller</td><td>Un des 5 derniers rafraîchissements a rencontré une erreur.</td></tr><tr><td>❌ Erreur</td><td>Les 5 derniers rafraîchissements ont échoué.</td></tr></tbody></table>

***

## Dépôts SFTP sécurisés

Les dépôts reposent sur un serveur SFTP dont les espaces sont **isolés** et mis à disposition pour **échanger des fichiers de manière sécurisée** entre la plateforme et des **partenaires** externes (prestataires, institutions, clients…).

Chaque dépôt correspond à un espace de stockage indépendant, accessible via :

* authentification par **clé SSH** (recommandée) ou
* authentification par **mot de passe**.

Ils servent de zones tampons sécurisées (“zones de pot”) pour le dépôt ou la récupération de fichiers externes avant intégration dans un dataset.

### Créer un dépôt

La création d’un dépôt est réservée aux **Platform Managers** depuis le panneau Sources de données > Dépôts.

Lors de la création :

* choisissez un **nom** explicite (ex. sftp-partenaire-finance),
* sélectionnez le mode de sécurité :
  * **Clé SSH** : ajoutez une ou plusieurs clés publiques de **type RSA** autorisées
  * **Mot de passe** : un identifiant et un mot de passe sont générés automatiquement,

Vous pouvez générer une clé SSH de type RSA depuis votre terminal :

```
ssh-keygen -t rsa
```

{% hint style="warning" %}
Le nom du dépôt est **visible par les utilisateurs** de la plateforme — évitez les informations confidentielles.

Le nombre de caractère maximum du **nom est de 32**.

La clé SSH doit être de type RSA
{% endhint %}

Par la suite, vous pourrez :

* **explorer les fichiers** : visualiser les liste de dossiers et fichiers depuis Dépôt > Explorateur
* **modifier** le dépôt : ajouter une clé SSH, renouveller un mote de passe
* **supprimer** le dépôt : suppression des fichiers et accès

### Durée de conservation et nettoyage automatique

Les fichiers déposés dans un dépôt font l’objet d’un **nettoyage automatique** :

* par défaut, la durée de conservation est de **7 jours** après la dernière modification du fichier,
* cette durée est configurable entre 1 et 30 jours,
* à expiration, les fichiers sont supprimés, mais l’arborescence des dossiers est conservée.

Cette politique garantit un **espace de stockage maîtrisé** tout en conservant la **structure logique** du dépôt.

### Connexion et utilisation (ex. FileZilla)

Les utilisateurs autorisés peuvent accéder à un dépôt via tout client SFTP (FileZilla, Cyberduck, WinSCP, etc.).

**Exemple FileZilla :**

1. Ouvrez Fichier > Gestionnaire de sites
2. Cliquez sur Nouveau site
3. Renseignez :
   * Protocole : SFTP – SSH File Transfer Protocol
   * Hôte : (adresse fournie dans la fiche dépôt)
   * Port : 22 (par défaut)
   * Utilisateur : identifiant du dépôt
   * Méthode d’authentification : mot de passe ou clé privée
4. Cliquez sur Connexion rapide

{% hint style="info" %}
Les informations exactes de connexion (hôte, port, utilisateur, clé SSH ou mot de passe) sont accessibles dans Configuration > Dépôts > Gestion > Fiche Dépôt.
{% endhint %}

***

## Bonnes pratiques de gouvernance

* Nommer clairement vos **datasources** (SFTP\_Partenaires\_2025, PostgreSQL\_Prod, etc.).
* Privilégier l’authentification par clé SSH ou token plutôt que par mot de passe.
* **Révoquer** immédiatement les **accès inutilisés**.
* Surveiller les **états de connectivité** pour éviter les échecs d’ingestion récurrents.
