Ασφάλεια & Πιστοποίηση

3 λεπτά ανάγνωσης

Ασφάλεια & Πιστοποίηση

Το 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 ROLEGRANT … TO pgarachneΚαταλληλότερη για
JWT (get_jwt)Bearer <jwt>✅ ΝαιΑπαιτείταιΣυνεδρίες τελικού χρήστη
API TokenBearer <token>✅ ΝαιΑπαιτείταιΑυτοματοποιημένες υπηρεσίες
Εξωτερικό JWTBearer <jwt>✅ ΝαιΑπαιτείταιΕνσωμάτωση εξωτερικού IdP
Άμεσα διαπιστευτήριαBasic <b64>❌ ΌχιΔεν απαιτείταιΑνάπτυξη, εσωτερικές υπηρεσίες

Δείτε επίσης