Ασφάλεια & Πιστοποίηση
Γρήγορη έναρξη
Ασφάλεια & Πιστοποίηση
Το PgArachne βασίζεται εξ ολοκλήρου στο σύστημα δικαιωμάτων της PostgreSQL. Δεν εφευρίσκει εκ νέου Access Control Lists (ACLs).
Το PgArachne υποστηρίζει τέσσερις μεθόδους πιστοποίησης. Οι μέθοδοι 1–3 χρησιμοποιούν
SET LOCAL ROLE για εναλλαγή ταυτότητας· η μέθοδος 4 (άμεσα διαπιστευτήρια) συνδέεται
απευθείας ως ο χρήστης, οπότε δεν απαιτείται εναλλαγή ρόλου.
1. Διαδραστική Σύνδεση (JWT)
Οι χρήστες πιστοποιούνται χρησιμοποιώντας το πραγματικό όνομα χρήστη και τον κωδικό πρόσβασης PostgreSQL τους μέσω
της μεθόδου JSON-RPC get_jwt. Εάν είναι επιτυχής, λαμβάνουν ένα βραχύβιο JWT. Τα επόμενα αιτήματα
φέρουν αυτό το token στην κεφαλίδα Authorization: Bearer <token>, και το PgArachne εναλλάσσει τον
ενεργό ρόλο σε αυτόν τον χρήστη για τη διάρκεια κάθε αιτήματος.
2. Λογαριασμοί Υπηρεσιών (API Tokens)
Για αυτοματοποιημένα συστήματα ή scripts, συνιστώνται τα μακρόβια API tokens.
- Τα tokens αποθηκεύονται στον πίνακα
pgarachne.api_tokens. - Κάθε token αντιστοιχίζεται σε συγκεκριμένο ρόλο βάσης δεδομένων.
- Στείλτε το token μέσω της κεφαλίδας
Authorization: Bearer <token>.
Η δημιουργία API tokens απαιτεί pgarachne_admin. Χρησιμοποιήστε το pgarachne.add_api_token(...)
με έναν ρόλο που είναι μέλος του pgarachne_admin.
3. Εξωτερικός Πάροχος Ταυτότητας (Bring Your Own JWT)
Εάν οι χρήστες πιστοποιούνται εκτός του PgArachne (για παράδειγμα, μέσω μιας εξωτερικής υπηρεσίας πιστοποίησης), μπορείτε να εκδίδετε JWT εκεί και να τα στέλνετε απευθείας στο PgArachne.
- Μορφή κεφαλίδας:
Authorization: Bearer <jwt>. - Υπογραφή: μόνο HMAC (
HS256/HS384/HS512) χρησιμοποιώντας το ίδιοJWT_SECRETπου έχει ρυθμιστεί στο PgArachne. - Απαραίτητα claims:
db_role(string, μη κενό) καιdb_name(string, πρέπει να ταιριάζει με το τμήμα διαδρομής:database). - Προτεινόμενο claim:
exp(Unix timestamp) για τη λήξη του token.
Παράδειγμα ελάχιστου payload:
{
"db_role": "demo_user",
"db_name": "my_database",
"exp": 1767225600
}Σημείωση: οι ασύμμετροι αλγόριθμοι JWT (π.χ. RS256 / ES256) δεν
υποστηρίζονται.
4. Άμεσα Διαπιστευτήρια Βάσης Δεδομένων (Basic Auth)
Η απλούστερη επιλογή: στείλτε το όνομα χρήστη και τον κωδικό πρόσβασης PostgreSQL με κάθε αίτημα
χρησιμοποιώντας την τυπική HTTP Basic Authentication. Το PgArachne ανοίγει ένα αποκλειστικό connection pool πιστοποιημένο απευθείας
ως αυτός ο χρήστης — το SET LOCAL ROLE δεν εκτελείται.
Authorization: Basic <base64(username:password)>Παράδειγμα με 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}'- Ταχεία δημιουργία πρωτοτύπων και τοπική ανάπτυξη — δεν απαιτείται διαχείριση tokens.
- Εσωτερικές υπηρεσίες που ήδη διαχειρίζονται τα διαπιστευτήρια με ασφάλεια.
- Σενάρια όπου η εκ των προτέρων έκδοση ενός JWT προσθέτει άσκοπη πολυπλοκότητα.
Βασικές διαφορές από τις μεθόδους που βασίζονται σε tokens:
- Δεν απαιτείται
GRANT demo_user TO pgarachne— το PgArachne δεν εναλλάσσει ρόλους. - Η Row-Level Security της PostgreSQL και τα δικαιώματα
GRANTεπιβάλλονται όπως συνήθως, επειδή η σύνδεση εκτελείται ως ο πραγματικός χρήστης. - Τα connection pools διατηρούνται ανά χρήστη για αποδοτικότητα, με μέγιστη διάρκεια ζωής 5 λεπτών. Μετά από αλλαγή κωδικού πρόσβασης, οι παλιές συνδέσεις λήγουν εντός αυτού του χρονικού παραθύρου.
- Για να λειτουργήσουν τα idempotency keys με άμεσα διαπιστευτήρια, παραχωρήστε στον χρήστη το δικαίωμα
EXECUTE ON FUNCTION pgarachne.save_idempotency_key(text).
Δικαιώματα Proxy: Απαιτούνται Μόνο για τις Μεθόδους 1–3
Για πιστοποίηση με JWT και API-token, το PgArachne συνδέεται ως ο χρήστης συστήματος που ορίζεται στο
DB_USER (π.χ. pgarachne) και εναλλάσσει ταυτότητα μέσω
SET LOCAL ROLE. Ο χρήστης συστήματος πρέπει να είναι μέλος κάθε ρόλου-στόχου.
-- Απαιτείται μόνο για πιστοποίηση JWT / API-token:
GRANT demo_user TO pgarachne;Αυτό το grant δεν απαιτείται κατά τη χρήση άμεσων διαπιστευτηρίων (μέθοδος 4).
Σύγκριση Μεθόδων Πιστοποίησης
| Μέθοδος | Κεφαλίδα | SET LOCAL ROLE | GRANT … TO pgarachne | Καταλληλότερη για |
|---|---|---|---|---|
| JWT (get_jwt) | Bearer <jwt> | ✅ Ναι | Απαιτείται | Συνεδρίες τελικού χρήστη |
| API Token | Bearer <token> | ✅ Ναι | Απαιτείται | Αυτοματοποιημένες υπηρεσίες |
| Εξωτερικό JWT | Bearer <jwt> | ✅ Ναι | Απαιτείται | Ενσωμάτωση εξωτερικού IdP |
| Άμεσα διαπιστευτήρια | Basic <b64> | ❌ Όχι | Δεν απαιτείται | Ανάπτυξη, εσωτερικές υπηρεσίες |