Monalisa
Modelo de dados

Credentials

Segredos versionados: senhas de usuário, credenciais técnicas de IF e senhas de usuários bancários.

Credentials é domínio próprio porque três consumidores guardam segredo do mesmo jeito: o login do usuário (user_credentials), a credencial técnica de uma conta na instituição financeira (financial_institution_credentials) e o usuário bancário (user_banks). Uma credencial tem versões; trocar a senha cria uma versão nova, e no máximo uma fica ativa.

Tabelas (2)

TabelaPara quê
credentialsA credencial em si: método (method), identificador externo e ciclo de vida (expiração, último uso, revogação).
credential_versionsCada versão do segredo: hash ou texto cifrado, quem criou e por quê, e o estado da versão.

Referência

credentials

A credencial em si: método (method), identificador externo e ciclo de vida (expiração, último uso, revogação).

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
uidtextnão
methodtextnão
external_idtextsim
attributesjsonbnãopadrão '{}'::jsonb
expires_attimestamptzsim
last_used_attimestamptzsim
revoked_attimestamptzsim
created_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • nenhuma

Referenciada por: credential_versions, financial_institution_credentials, user_banks, user_credentials.

Garantido pelo banco

TipoNomeDefinição
PKcredentials_pkeyPRIMARY KEY (id)
UNIQUEcredentials_uid_uniqueUNIQUE (uid)

Fora do banco

  • method não tem CHECK; os métodos aceitos são definidos na aplicação.

credential_versions

Cada versão do segredo: hash ou texto cifrado, quem criou e por quê, e o estado da versão.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
credential_idbigintnão
versionintegernão
identifiertextsim
identifier_typetextsim
secret_hashtextsim
secret_ciphertextbyteasim
encryption_key_idtextsim
statustextnãopadrão 'pending'
expires_attimestamptzsim
created_by_user_idbigintsim
created_by_servicetextsim
change_reasontextnão
created_attimestamptznãopadrão clock_timestamp()
activated_attimestamptzsim
retired_attimestamptzsim

Chaves estrangeiras

  • created_by_user_id → users.id
  • credential_id → credentials.id

Referenciada por: bank_credential_deliveries.

Garantido pelo banco

TipoNomeDefinição
CHECKcredential_versions_positive_version_checkCHECK ((version > 0))
PKcredential_versions_pkeyPRIMARY KEY (id)
UNIQUEcredential_versions_credential_version_keyUNIQUE (credential_id, version)
UNIQUEcredential_versions_id_credential_keyUNIQUE (id, credential_id)
UNIQUE parcialcredential_versions_one_active_key(credential_id) WHERE (status = 'active')

Fora do banco

  • status não tem CHECK de valores; só a unicidade da versão active é garantida.
  • Exatamente um autor (created_by_user_id ou created_by_service) não é garantido por CHECK.

Nesta página