Na minha educação, fui informado de que é uma idéia falha expor as chaves primárias reais (não apenas as chaves do banco de dados, mas todos os acessadores primários) ao usuário.
Eu sempre pensei que fosse um problema de segurança (porque um invasor poderia tentar ler coisas que não eram suas).
Agora eu tenho que verificar se o usuário tem permissão para acessar de qualquer maneira, existe uma razão diferente por trás disso?
Além disso, como meus usuários precisam acessar os dados de qualquer maneira, precisarei ter uma chave pública para o mundo exterior em algum lugar no meio. Agora essa chave pública tem os mesmos problemas que a chave primária, não é?
Houve a solicitação de um exemplo sobre por que fazer isso de qualquer maneira, então aqui está um. Lembre-se de que a pergunta deve ser sobre o próprio princípio, não apenas se for aplicável neste exemplo. As respostas para outras situações são explicitamente bem-vindas.
O aplicativo (Web, celular) que lida com atividades, possui várias interfaces de usuário e pelo menos uma API automatizada para comunicação entre sistemas (por exemplo, o departamento de contabilidade deseja saber quanto cobrar do cliente com base no que foi feito). O aplicativo tem vários clientes, portanto a separação de seus dados (logicamente, os dados são armazenados no mesmo banco de dados) é essencial no sistema. Cada solicitação será verificada quanto à validade, não importa o quê.
A atividade é granular muito fina e, portanto, fica junto em algum objeto contêiner, vamos chamá-lo de "Tarefa".
Três casos de uso:
- O usuário A deseja enviar o usuário B para alguma tarefa, para que ele envie um link (HTTP) para realizar alguma atividade lá.
- O usuário B precisa sair do prédio para abrir a tarefa em seu dispositivo móvel.
- A contabilidade deseja cobrar do cliente pela tarefa, mas usa um sistema de contabilidade de terceiros que carrega automaticamente a tarefa / atividade por algum código que se refere à API REST do aplicativo
Cada um dos casos de uso exige (ou fica mais fácil se) o agente possuir algum identificador endereçável para a tarefa e a atividade.
ON UPDATE CASCADE
foi feito para que, embora se o problema é a segurança, em seguida, a verificação de acesso deve estar no backend e não confiar o usuário de qualquer maneira (específico mysql?)