Entendendo as Tabelas Padrão do Django: Autenticação, Permissões e Infraestrutura
Quando iniciamos um projeto com Django, várias tabelas são criadas automaticamente no banco de dados.
Para quem olha pela primeira vez, nomes como auth_group, django_content_type ou django_migrations podem parecer confusos.
Este artigo explica para que serve cada uma dessas tabelas, como elas se relacionam e quando você deve (ou não) interagir com elas.
Atenção: a maioria dessas tabelas faz parte da infraestrutura do framework. Elas não são tabelas de negócio.
Visão geral
As tabelas padrão do Django podem ser agrupadas em quatro grandes áreas:
- Autenticação (quem é o usuário)
- Autorização (o que o usuário pode fazer)
- Infraestrutura interna do framework
- Sessão e estado
1. Tabelas de Autenticação
auth_user
É a tabela central de usuários autenticáveis do Django.
Ela armazena informações como:
- nome de usuário
- senha (sempre em hash)
- flags de acesso (
is_active,is_staff,is_superuser) - datas de login e criação
Essa tabela é usada pelo sistema de login, logout e controle de acesso.
Boa prática: use auth_user para autenticação, não como entidade de negócio (ex.: funcionário, cliente, aluno).
2. Tabelas de Autorização (Permissões)
auth_permission
Armazena permissões individuais do sistema.
Para cada model Django, o framework cria automaticamente permissões padrão, como:
- adicionar
- alterar
- excluir
- visualizar
Essas permissões são usadas para controlar o acesso a funcionalidades específicas.
auth_group
Representa grupos de usuários.
Um grupo é basicamente um conjunto de permissões que pode ser atribuído a vários usuários.
Exemplos de grupos comuns:
- Administradores
- Editores
- Leitores
auth_group_permissions
Tabela associativa entre:
- grupos
- permissões
Define quais permissões cada grupo possui.
É aqui que o Django resolve a pergunta:
“O que usuários deste grupo podem fazer?”
auth_user_groups
Tabela associativa entre:
- usuários
- grupos
Define a quais grupos cada usuário pertence.
Um usuário pode estar em vários grupos ao mesmo tempo.
auth_user_user_permissions
Tabela associativa entre:
- usuários
- permissões individuais
Permite conceder permissões diretamente a um usuário, sem passar por grupos.
Boa prática: usar grupos sempre que possível e evitar permissões diretas, pois elas dificultam a manutenção.
3. Tabelas de Infraestrutura do Django
django_content_type
Registra todos os models instalados no projeto.
Cada registro identifica:
- o app
- o nome do model
Essa tabela é usada internamente pelo Django para:
- sistema de permissões
- Django Admin
- relacionamentos genéricos
- logs
Ela é fundamental para o funcionamento interno do framework.
django_admin_log
Armazena logs de ações realizadas no Django Admin.
Registra informações como:
- qual usuário realizou a ação
- qual objeto foi afetado
- qual operação foi executada (criação, alteração, exclusão)
É muito útil para auditoria administrativa.
django_migrations
Controla quais migrações já foram aplicadas no banco de dados.
Cada vez que você executa python manage.py migrate, o Django consulta essa tabela para saber:
- quais migrações já rodaram
- quais ainda precisam ser aplicadas
Importante: nunca edite ou apague registros dessa tabela manualmente.
4. Tabela de Sessão
django_session
Armazena as sessões ativas dos usuários.
É usada para:
- manter usuários logados
- armazenar dados temporários
- mensagens flash
- estados intermediários de formulários
As sessões têm prazo de validade e podem ser limpas automaticamente.
Resumo rápido
| Tabela | Finalidade |
|---|---|
auth_user | Usuários do sistema |
auth_group | Grupos / perfis |
auth_permission | Permissões |
auth_group_permissions | Grupo ↔ Permissão |
auth_user_groups | Usuário ↔ Grupo |
auth_user_user_permissions | Permissões diretas |
django_content_type | Registro de models |
django_admin_log | Log do admin |
django_migrations | Controle de migrations |
django_session | Sessões |
Boas práticas gerais
- Não manipule essas tabelas diretamente via SQL.
- Use sempre a API do Django (models, admin, permissions).
- Centralize permissões em grupos.
- Use
auth_userapenas para autenticação. - Separe entidades de negócio em tabelas próprias.
Conclusão
As tabelas padrão do Django formam a base de segurança e funcionamento do framework. Entendê-las ajuda a:
- modelar sistemas mais seguros
- evitar erros em produção
- criar arquiteturas mais limpas e escaláveis
Mesmo que você nunca precise mexer nelas diretamente, saber para que cada uma existe faz toda a diferença.
