> For the complete documentation index, see [llms.txt](https://docs.airops.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.airops.com/docs/fr/contexte/memory-stores/add-data/import-from-sql-database/data-sources/snowflake.md).

# Snowflake

Connectez-vous à un entrepôt de données Snowflake dans AirOps

{% hint style="info" %}
**N'oubliez pas d'autoriser notre adresse IP `52.71.87.39`**

Si votre base de données est protégée par un pare-feu, n'oubliez pas d'autoriser l'accès entrant à l'adresse IP d'AirOps sur le port de votre base de données.
{% endhint %}

## Paramètres de connexion de base

1. **Identifiant du compte** - l'ID de votre compte Snowflake.
   * Si l'URL de votre Snowflake est `https://**[en54071.us-east-2.aws](http://en54071.us-east-2.aws)**.snowflakecomputing.com/`, alors votre identifiant de compte est **`en54071.us-east-2.aws`.**
   * Vous pouvez également trouver l'ID de votre compte Snowflake en saisissant `CURRENT_ACCOUNT()` dans une feuille de calcul Snowflake et en l'exécutant.
2. **Utilisateur** - l'utilisateur Snowflake qu'AirOps utilisera pour se connecter à la base de données. Il est recommandé de créer un nouvel utilisateur pour AirOps (instructions ci-dessous), mais tout utilisateur disposant des privilèges SELECT peut être utilisé. **Les noms d'utilisateur Snowflake sont sensibles à la casse.**
3. **Entrepôt** - l'entrepôt Snowflake auquel AirOps se connectera.
4. **Base de données** - base de données au sein de l'entrepôt Snowflake ci-dessus.
5. **Rôle** (Facultatif) - le rôle Snowflake à utiliser pour la\
   connexion. S'il n'est pas fourni, nous utiliserons le rôle\
   par défaut de l'utilisateur.

## Méthodes d'authentification

AirOps prend en charge deux méthodes d'authentification pour les connexions Snowflake :

### Authentification par nom d'utilisateur et mot de passe

**Mot de passe** - mot de passe de l'utilisateur ci-dessus.

### Authentification par paire de clés (recommandée)

L'authentification par paire de clés offre une sécurité renforcée et est requise lorsque MFA est activé sur votre compte Snowflake.

**Clé privée** - votre clé privée RSA au format PEM (voir les instructions de configuration ci-dessous).

**Phrase de passe de la clé privée** (Facultatif) - requis uniquement si votre clé privée est chiffrée.

## Configuration de l'authentification par paire de clés

### Étape 1 : générer une paire de clés

Ouvrez la ligne de commande dans une fenêtre de terminal.

Générez une clé privée. Vous pouvez générer une version chiffrée ou une version non chiffrée de la clé privée.

**Pour générer une version non chiffrée**, vous pouvez exécuter l'une des commandes suivantes :

```
openssl genrsa -out rsa_key.pem 2048
```

```
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
```

**Pour générer une version chiffrée (recommandé)**, exécutez la commande :

```
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 <ALGORITHM> -inform PEM -out rsa_key.p8
```

Vous pouvez utiliser différents algorithmes avec l'option de ligne de commande -v1. Ces algorithmes utilisent l'algorithme de chiffrement basé sur mot de passe PKCS#12 et vous permettent d'utiliser des algorithmes de chiffrement puissants comme le triple DES ou le RC2 128 bits. Vous pouvez utiliser les algorithmes de chiffrement suivants :

* `PBE-SHA1-RC2-40`
* `PBE-SHA1-RC4-40`
* `PBE-SHA1-RC2-128`
* `PBE-SHA1-RC4-128`
* `PBE-SHA1-3DES`
* `PBE-SHA1-2DES`

Pour utiliser **des algorithmes de chiffrement plus forts**, exécutez la commande :

```
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 -inform PEM -out rsa_key.p8
```

Vous pouvez utiliser différents algorithmes avec l'option de ligne de commande -v2. Vous pouvez utiliser les algorithmes de chiffrement suivants :

* `AES128`
* `AES256`
* `DES3`

### Étape 2 : générer la clé publique

À partir de la ligne de commande, générez la clé publique en faisant référence à la version correcte de votre clé privée générée. Vous pouvez exécuter l'une des commandes suivantes :

Si vous avez utilisé la commande openssl genrsa -out rsa\_key.pem 2048 pour créer la clé privée, exécutez :

```
openssl rsa -in rsa_key.pem -pubout -out rsa_key.pub
```

Si vous avez utilisé la commande openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa\_key.p8 -nocrypt pour créer la clé privée, alors exécutez :

```
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
```

### Étape 3 : attribuer la clé publique à l'utilisateur Snowflake

Dans une feuille de calcul Snowflake, exécutez la commande :

```
ALTER USER <USERNAME> SET RSA_PUBLIC_KEY='<PUBLIC_KEY>';
```

Remplacez \<USERNAME> par votre nom d'utilisateur Snowflake et \<PUBLIC\_KEY> par le contenu de votre fichier de clé publique (à l'exclusion des lignes -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY-----).

### Étape 4 : configurer la connexion AirOps

1. Sélectionnez « Authentification par paire de clés » comme méthode d'authentification
2. Copiez et collez votre clé privée dans le champ « Clé privée » (incluez les lignes -----BEGIN PRIVATE KEY----- et -----END PRIVATE KEY-----)
3. Si votre clé privée est chiffrée, saisissez la phrase de passe dans le champ « Phrase de passe de la clé privée »
4. Complétez les autres champs de connexion et testez votre connexion

## Configuration de l'utilisateur et du rôle (pour les nouveaux utilisateurs)

Pour ajouter une base de données Snowflake comme source de données sur AirOps, utilisez un utilisateur existant ou créez un utilisateur avec **un** accès en lecture aux tables, vues et schémas auxquels vous souhaitez accéder depuis AirOps :

### 1. Créer le rôle AirOps

```sql
CREATE ROLE IF NOT EXISTS AIROPS_ROLE COMMENT = "Airops default role";
```

### 2. Créer l'utilisateur AirOps et attribuer le rôle

<pre class="language-sql"><code class="lang-sql"><strong>CREATE USER AIROPS_USER
</strong>	password = '&#x3C;secure-password>'
	first_name = 'AirOps'
	last_name = 'User'
	default_warehouse = '&#x3C;warehouse>' 
	default_namespace = '&#x3C;database>.&#x3C;schema>'
	default_role = AIROPS_ROLE;

GRANT ROLE AIROPS_ROLE TO USER AIROPS_USER;
GRANT ROLE AIROPS_ROLE TO ROLE SYSADMIN;
</code></pre>

### 3. Accorder les privilèges USAGE au rôle AirOps

```sql
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE AIROPS_ROLE;

GRANT USAGE ON DATABASE "<database>" TO ROLE AIROPS_ROLE;

GRANT USAGE ON ALL SCHEMAS IN DATABASE "<database>" TO ROLE AIROPS_ROLE;
GRANT USAGE ON FUTURE SCHEMAS IN DATABASE "<database>" TO ROLE AIROPS_ROLE;

GRANT SELECT ON ALL TABLES IN DATABASE "<database>" TO ROLE AIROPS_ROLE;
GRANT SELECT ON FUTURE TABLES IN DATABASE "<database>" TO ROLE AIROPS_ROLE;

GRANT SELECT ON ALL VIEWS IN DATABASE "<database>" TO ROLE AIROPS_ROLE;
GRANT SELECT ON FUTURE VIEWS IN DATABASE "<database>" TO ROLE AIROPS_ROLE;
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.airops.com/docs/fr/contexte/memory-stores/add-data/import-from-sql-database/data-sources/snowflake.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
