> 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/de/kontext/memory-stores/add-data/import-from-sql-database/data-sources/snowflake.md).

# Snowflake

Ein Snowflake-Data-Warehouse in AirOps verbinden

{% hint style="info" %}
**Denk daran, unsere IP-Adresse auf die Allowlist zu setzen `52.71.87.39`**

Wenn deine Datenbank durch eine Firewall geschützt ist, denke daran, eingehenden Zugriff für die IP-Adresse von AirOps über deinen Datenbank-Port zu erlauben.
{% endhint %}

## Grundlegende Verbindungsparameter

1. **Kontokennung** - die ID deines Snowflake-Kontos.
   * Wenn deine Snowflake-URL lautet `https://**[en54071.us-east-2.aws](http://en54071.us-east-2.aws)**.snowflakecomputing.com/`, dann ist deine Kontokennung **`en54071.us-east-2.aws`.**
   * Du kannst deine Snowflake-Konto-ID auch finden, indem du `CURRENT_ACCOUNT()` in ein Snowflake-Arbeitsblatt eingibst und ausführst.
2. **Benutzer** - der Snowflake-Benutzer, mit dem AirOps eine Verbindung zur Datenbank herstellen wird. Es ist Best Practice, einen neuen Benutzer für AirOps zu erstellen (Anweisungen unten), aber jeder Benutzer mit SELECT-Berechtigungen kann verwendet werden. **Snowflake-Benutzernamen sind groß-/kleinschreibungsempfindlich.**
3. **Warehouse** - das Snowflake-Warehouse, mit dem AirOps eine Verbindung herstellen wird.
4. **Datenbank** - Datenbank innerhalb des oben genannten Snowflake-Warehouses.
5. **Rolle** (Optional) - die Snowflake-Rolle, die für die\
   Verbindung verwendet wird. Wenn nicht angegeben, verwenden wir die Standardrolle\
   des Benutzers.

## Authentifizierungsmethoden

AirOps unterstützt zwei Authentifizierungsmethoden für Snowflake-Verbindungen:

### Benutzername- und Passwort-Authentifizierung

**Passwort** - Passwort für den oben genannten Benutzer.

### Schlüsselpaar-Authentifizierung (empfohlen)

Die Schlüsselpaar-Authentifizierung bietet erhöhte Sicherheit und ist erforderlich, wenn MFA für dein Snowflake-Konto aktiviert ist.

**Privater Schlüssel** - Dein RSA-Privatschlüssel im PEM-Format (siehe Einrichtungsanweisungen unten).

**Passphrase für den privaten Schlüssel** (Optional) - nur erforderlich, wenn dein privater Schlüssel verschlüsselt ist.

## Einrichten der Schlüsselpaar-Authentifizierung

### Schritt 1: Schlüsselpaar generieren

Öffne die Kommandozeile in einem Terminalfenster.

Generiere einen privaten Schlüssel. Du kannst eine verschlüsselte oder eine unverschlüsselte Version des privaten Schlüssels generieren.

**Um eine unverschlüsselte Version**, kannst du einen der folgenden Befehle ausführen:

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

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

**Um eine verschlüsselte Version zu generieren (empfohlen)**, führe den Befehl aus:

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

Du kannst mit der Befehlszeilenoption -v1 verschiedene Algorithmen verwenden. Diese Algorithmen verwenden den PKCS#12-passwortbasierten Verschlüsselungsalgorithmus und ermöglichen dir die Verwendung starker Verschlüsselungsalgorithmen wie Triple DES oder 128-Bit-RC2. Du kannst die folgenden Verschlüsselungsalgorithmen verwenden:

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

Um **stärkere Verschlüsselungsalgorithmen**, führe den Befehl aus:

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

Du kannst mit der Befehlszeilenoption -v2 verschiedene Algorithmen verwenden. Du kannst die folgenden Verschlüsselungsalgorithmen verwenden:

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

### Schritt 2: Öffentlichen Schlüssel generieren

Erzeuge über die Kommandozeile den öffentlichen Schlüssel, indem du auf die richtige Version deines generierten privaten Schlüssels verweist. Du kannst einen der folgenden Befehle ausführen:

Wenn du den Befehl openssl genrsa -out rsa\_key.pem 2048 verwendet hast, um den privaten Schlüssel zu erstellen, führe aus:

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

Wenn du den Befehl openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa\_key.p8 -nocrypt verwendet hast, um den privaten Schlüssel zu erstellen, führe dann aus:

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

### Schritt 3: Öffentlichen Schlüssel dem Snowflake-Benutzer zuweisen

Führe in einem Snowflake-Arbeitsblatt den Befehl aus:

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

Ersetze \<USERNAME> durch deinen Snowflake-Benutzernamen und \<PUBLIC\_KEY> durch den Inhalt deiner öffentlichen Schlüsseldatei (ohne die Zeilen -----BEGIN PUBLIC KEY----- und -----END PUBLIC KEY-----).

### Schritt 4: AirOps-Verbindung konfigurieren

1. Wähle "Schlüsselpaar-Authentifizierung" als deine Authentifizierungsmethode
2. Kopiere und füge deinen privaten Schlüssel in das Feld "Privater Schlüssel" ein (einschließlich der Zeilen -----BEGIN PRIVATE KEY----- und -----END PRIVATE KEY-----)
3. Wenn dein privater Schlüssel verschlüsselt ist, gib die Passphrase im Feld "Passphrase für den privaten Schlüssel" ein
4. Fülle die anderen Verbindungsfelder aus und teste deine Verbindung

## Benutzer und Rolle einrichten (für neue Benutzer)

Um eine Snowflake-Datenbank als Datenquelle in AirOps hinzuzufügen, verwende einen bestehenden Benutzer oder erstelle einen Benutzer mit **Lesezugriff** auf die Tabellen, Views und Schemas, auf die du von AirOps aus zugreifen möchtest:

### 1. AirOps-Rolle erstellen

```sql
CREATE ROLE IF NOT EXISTS AIROPS_ROLE COMMENT = "Standardrolle von AirOps";
```

### 2. AirOps-Benutzer erstellen und Rolle zuweisen

<pre class="language-sql"><code class="lang-sql"><strong>CREATE USER AIROPS_USER
</strong>	password = '&#x3C;secure-password>'
	first_name = 'AirOps'
	last_name = 'Benutzer'
	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. USAGE-Berechtigungen für die AirOps-Rolle gewähren

```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/de/kontext/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.
