Sicherheit & Authentifizierung
Schnellstart
Sicherheit & Authentifizierung
PgArachne verlässt sich vollständig auf das PostgreSQL-Berechtigungssystem. Es erfindet keine Access Control Lists (ACLs) neu.
PgArachne unterstützt vier Authentifizierungsmethoden. Die Methoden 1–3 verwenden
SET LOCAL ROLE, um die Identität zu wechseln; Methode 4 (direkte Zugangsdaten) verbindet sich
direkt als der jeweilige Benutzer, sodass kein Rollenwechsel nötig ist.
1. Interaktives Login (JWT)
Benutzer authentifizieren sich mit ihrem echten PostgreSQL-Benutzernamen und -Passwort über die
JSON-RPC-Methode get_jwt. Bei Erfolg erhalten sie ein kurzlebiges JWT. Nachfolgende Anfragen
übermitteln dieses Token im Header Authorization: Bearer <token>, und PgArachne wechselt die
aktive Rolle für die Dauer jeder Anfrage zu diesem Benutzer.
2. Service-Konten (API-Token)
Für automatisierte Systeme oder Skripte werden langlebige API-Token empfohlen.
- Token werden in der Tabelle
pgarachne.api_tokensgespeichert. - Jedes Token ist einer bestimmten Datenbankrolle zugeordnet.
- Senden Sie das Token über den Header
Authorization: Bearer <token>.
Das Erstellen von API‑Tokens erfordert pgarachne_admin. Verwenden Sie pgarachne.add_api_token(...)
mit einer Rolle, die Mitglied von pgarachne_admin ist.
3. Externer Identity Provider (eigenes JWT)
Wenn Benutzer außerhalb von PgArachne authentifiziert werden (z. B. über einen externen Auth-Dienst), kann dieser Dienst dort JWTs ausstellen und direkt an PgArachne senden.
- Header-Format:
Authorization: Bearer <jwt>. - Signatur: nur HMAC (
HS256/HS384/HS512) mit demselbenJWT_SECRET, der in PgArachne konfiguriert ist. - Pflicht-Claims:
db_role(String, nicht leer) unddb_name(String, muss mit dem:database-Pfadsegment übereinstimmen). - Empfohlener Claim:
exp(Unix-Timestamp) für das Ablaufdatum.
Minimales Payload-Beispiel:
{
"db_role": "demo_user",
"db_name": "my_database",
"exp": 1767225600
}Hinweis: asymmetrische JWT-Algorithmen (z. B. RS256 / ES256) werden
nicht unterstützt.
4. Direkte Datenbankzugangsdaten (Basic Auth)
Die einfachste Option: Senden Sie den PostgreSQL-Benutzernamen und das Passwort mit jeder Anfrage
über Standard-HTTP-Basic-Authentifizierung. PgArachne öffnet einen dedizierten Connection-Pool, der direkt
als dieser Benutzer authentifiziert ist — SET LOCAL ROLE wird nicht ausgeführt.
Authorization: Basic <base64(username:password)>Beispiel mit curl:
curl -X POST http://localhost:8080/db/my_database/jsonrpc \
-u demo_user:user_password \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"api.hello_world","params":{},"id":1}'- Schnelles Prototyping und lokale Entwicklung — kein Token-Management erforderlich.
- Interne Dienste, die Zugangsdaten bereits sicher verwalten.
- Szenarien, in denen das vorherige Ausstellen eines JWT unnötige Komplexität hinzufügt.
Wesentliche Unterschiede zu den token-basierten Methoden:
- Es ist kein
GRANT demo_user TO pgarachneerforderlich — PgArachne wechselt keine Rollen. - PostgreSQL Row-Level Security und
GRANT-Berechtigungen werden wie gewohnt durchgesetzt, da die Verbindung als der tatsächliche Benutzer läuft. - Verbindungs-Pools werden pro Benutzer für maximal 5 Minuten vorgehalten. Nach einer Passwortänderung laufen alte Verbindungen innerhalb dieses Zeitfensters ab.
- Damit Idempotency Keys mit direkten Zugangsdaten funktionieren, erteilen Sie dem Benutzer
EXECUTE ON FUNCTION pgarachne.save_idempotency_key(text).
Proxy-Privilegien: Nur für Methoden 1–3 erforderlich
Bei der JWT- und API-Token-Authentifizierung verbindet sich PgArachne als der in
DB_USER definierte Systembenutzer (z. B. pgarachne) und wechselt die Identität über
SET LOCAL ROLE. Der Systembenutzer muss Mitglied jeder Zielrolle sein.
-- Required for JWT / API-token auth only:
GRANT demo_user TO pgarachne;Dieses GRANT ist nicht erforderlich, wenn Sie direkte Zugangsdaten (Methode 4) verwenden.
Vergleich der Authentifizierungsmethoden
| Methode | Header | SET LOCAL ROLE | GRANT … TO pgarachne | Am besten für |
|---|---|---|---|---|
| JWT (get_jwt) | Bearer <jwt> | ✅ Ja | Erforderlich | Endnutzer-Sitzungen |
| API-Token | Bearer <token> | ✅ Ja | Erforderlich | Automatisierte Dienste |
| Externes JWT | Bearer <jwt> | ✅ Ja | Erforderlich | Integration externer Identity Provider |
| Direkte Zugangsdaten | Basic <b64> | ❌ Nein | Nicht erforderlich | Entwicklung, interne Dienste |