Início rápido
Segurança e Autenticação
O PgArachne depende inteiramente do sistema de permissões do PostgreSQL. Ele não reinventa Listas
de Controle de Acesso (ACLs). Todas as consultas são executadas sob o papel de banco de dados específico
do usuário autenticado usando SET LOCAL ROLE.
1. Login Interativo (JWT)
Os usuários se autenticam usando seu nome de usuário e senha reais do PostgreSQL via a função de login. Se bem-sucedido, eles recebem um JWT genérico. Quando este token é usado, o PgArachne muda o papel ativo para esse usuário pela duração da requisição.
2. Contas de Serviço (Tokens de API)
Para sistemas automatizados ou scripts, você pode usar chaves de API de longa duração.
- Os tokens são armazenados na tabela
pgarachne.api_tokens. - Cada token é mapeado para um usuário/papel de banco de dados específico.
- Envie o token através do cabeçalho
Authorization: Bearer <token>.
A criação de tokens de API requer pgarachne_admin. Use pgarachne.add_api_token(...) com um papel membro de pgarachne_admin.
3. Provedor de identidade externo (JWT próprio)
Se você autentica usuários fora do PgArachne (por exemplo, em um serviço de autenticação externo), pode emitir os JWTs nesse serviço e enviá-los diretamente ao PgArachne.
- Formato do cabeçalho:
Authorization: Bearer <jwt>. - Assinatura: apenas HMAC (
HS256/HS384/HS512) com o mesmoJWT_SECRETconfigurado no PgArachne. - Claims obrigatórios:
db_role(string não vazia) edb_name(string que deve corresponder a/api/:database). - Claim recomendado:
exp(timestamp Unix) para expiração do token.
Exemplo mínimo de payload:
{
"db_role": "demo_user",
"db_name": "my_database",
"exp": 1767225600
}Importante: algoritmos JWT assimétricos (por exemplo RS256/ES256)
não são aceitos pela implementação atual do servidor.
Configuração Crítica: Privilégios do Proxy
Como o PgArachne se conecta como o usuário definido em DB_USER (ex:
pgarachne) e muda a identidade para outros usuários, o usuário proxy deve ser
membro desses papéis alvo.
Execute este SQL para cada usuário/papel que precisa fazer login:
-- Permitir que 'pgarachne' mude para 'demo_user'
GRANT demo_user TO pgarachne;