Bezpečnost a autentizace
Rychlý start
Bezpečnost a autentizace
PgArachne se plně spoléhá na systém oprávnění PostgreSQL. Nevynalézá znovu Access Control Lists (ACL).
PgArachne podporuje čtyři metody autentizace. Metody 1–3 používají
SET LOCAL ROLE k přepnutí identity; metoda 4 (přímé přihlášení) se připojuje
přímo jako daný uživatel, takže přepnutí role není zapotřebí.
1. Interaktivní přihlášení (JWT)
Uživatelé se autentizují pomocí svého skutečného PostgreSQL uživatelského jména a hesla
přes metodu JSON-RPC get_jwt. Pokud je úspěšná, obdrží krátkodobý JWT. Při použití tohoto tokenu
přepne PgArachne aktivní roli na tohoto uživatele po dobu trvání každého požadavku.
2. Služby (API tokeny)
Pro automatizované systémy nebo skripty lze použít dlouhodobé API tokeny.
- Tokeny jsou uloženy v tabulce
pgarachne.api_tokens. - Každý token je mapován na konkrétního databázového uživatele/roli.
- Token odešlete v hlavičce
Authorization: Bearer <token>.
Vytváření API tokenů vyžaduje pgarachne_admin. Použijte pgarachne.add_api_token(...) s rolí, která je členem pgarachne_admin.
3. Externí identity provider (vlastní JWT)
Pokud uživatele autentizujete mimo PgArachne (například v externí autentizační službě), můžete JWT vydávat tam a posílat ho přímo do PgArachne.
- Formát hlavičky:
Authorization: Bearer <jwt>. - Podepisování: pouze HMAC (
HS256/HS384/HS512) se stejnýmJWT_SECRET, jaký má PgArachne. - Povinné claimy:
db_role(řetězec, nesmí být prázdný) adb_name(řetězec, musí odpovídat/api/:database). - Doporučený claim:
exp(unixový časový otisk) pro expiraci tokenu.
Minimální příklad těla tokenu:
{
"db_role": "demo_user",
"db_name": "my_database",
"exp": 1767225600
}Důležité: asymetrické JWT algoritmy (např. RS256/ES256) aktuální
implementace serveru nepřijímá.
4. Přímé přihlášení databázovými údaji (Basic Auth)
Nejjednodušší možnost: zasílejte PostgreSQL uživatelské jméno a heslo s každým požadavkem
prostřednictvím standardní HTTP Basic Authentication. PgArachne otevře vyhrazený connection pool autentizovaný
přímo jako daný uživatel — SET LOCAL ROLE se neprovede.
Authorization: Basic <base64(uzivatel:heslo)>Příklad s curl:
curl -X POST http://localhost:8080/db/my_database/jsonrpc \
-u demo_user:heslo \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"api.hello_world","params":{},"id":1}'- Rychlé prototypování a lokální vývoj — není třeba správa tokenů.
- Interní služby, kde jsou přihlašovací údaje již bezpečně spravovány.
- Situace, kdy by vydání JWT předem zbytečně komplikovalo řešení.
Klíčové rozdíly oproti metodám s tokeny:
- Příkaz
GRANT demo_user TO pgarachnenení vyžadován — PgArachne roli nepřepíná. - PostgreSQL Row-Level Security a oprávnění definovaná pomocí
GRANTjsou vynucena standardně, protože spojení běží přímo pod daným uživatelem. - Connection pooly jsou udržovány pro každého uživatele zvlášť a mají maximální dobu životnosti 5 minut. Po změně hesla stará spojení vyprší během tohoto okna.
- Aby idempotency klíče fungovaly s přímým přihlášením, udělte uživateli oprávnění
EXECUTE ON FUNCTION pgarachne.save_idempotency_key(text).
Oprávnění proxy: vyžadováno pouze pro metody 1–3
Při autentizaci pomocí JWT nebo API tokenů se PgArachne připojuje jako systémový uživatel definovaný v
DB_USER (např. pgarachne) a přepíná identitu pomocí
SET LOCAL ROLE. Systémový uživatel musí být členem každé cílové role.
-- Vyžadováno pouze pro JWT / API-token autentizaci:
GRANT demo_user TO pgarachne;Tento grant není zapotřebí při použití přímého přihlášení (metoda 4).
Srovnání metod autentizace
| Metoda | Hlavička | SET LOCAL ROLE | GRANT … TO pgarachne | Nejlépe pro |
|---|---|---|---|---|
| JWT (get_jwt) | Bearer <jwt> | ✅ Ano | Vyžadováno | Uživatelské relace |
| API Token | Bearer <token> | ✅ Ano | Vyžadováno | Automatizované služby |
| Externí JWT | Bearer <jwt> | ✅ Ano | Vyžadováno | Integrace externího IdP |
| Přímé přihlášení | Basic <b64> | ❌ Ne | Nevyžadováno | Vývoj, interní služby |