Você tem um ponto — mas vale olhar o cenário completo:
IDs como UUID
, ULID
e Snowflake
não foram inventados para complicar, mas sim para resolver problemas reais: escalabilidade, distribuição, exposição pública de dados, rastreabilidade e segurança passiva.
Se você tem um sistema local, centralizado, como uma padaria ou ERP interno, usar AUTO_INCREMENT
(1, 2, 3...) faz total sentido. É simples, direto, performático, e o próprio banco garante integridade.
Mas se você pensa em crescer...
Quando seu sistema começa a se expandir — seja com APIs públicas, microsserviços, recursos abertos como rastreios e compartilhamentos — a previsibilidade dos IDs se torna um vetor real de exploração.
Mesmo sem vazar dados sensíveis diretamente, um atacante pode:
- Mapear
/pedido/1
,/pedido/2
,/pedido/3
... por brute force; - Descobrir quantos registros existem no sistema;
- Levantar padrões internos (quem compra mais, horários, status etc.);
- Fazer scraping contínuo de dados públicos;
- Criar até serviços paralelos não autorizados, sem usar sua API, apenas explorando a previsibilidade do padrão de URL.
E isso tudo sem quebrar sua segurança — só explorando sua arquitetura.
IDs aleatórios mitigam esse risco
Usar ULID
, UUIDv7
ou até hash público ajuda a:
- Evitar enumeração simples (não dá pra saber o "próximo");
- Forçar uso da API oficial, com autenticação e limites;
- Desacoplar lógica interna do acesso externo;
- Reduzir a superfície de scraping automatizado.
E o argumento do "espaço"?
O custo de armazenamento de UUIDs
ou ULIDs
é irrelevante para 99% dos sistemas modernos. Se seu sistema não roda com dezenas de milhões de requisições por minuto, isso nem deveria ser uma preocupação.
Conclusão prática
AUTO_INCREMENT
é perfeito para sistemas internos, fechados e simples.- IDs aleatórios fazem mais sentido quando:
- o sistema está exposto ao público;
- há risco de scraping ou indexação não autorizada;
- a arquitetura envolve microsserviços e alta escala;
- você quer desacoplar o ID do comportamento interno.
Um ID previsível pode virar um endpoint público involuntário.
E nesse momento, o controle do seu sistema já não é mais só seu.