Au cours de ma formation, on m'a dit qu'il est impensable d'exposer les clés primaires réelles (non seulement les clés de base de données, mais tous les accesseurs principaux) à l'utilisateur.
J'ai toujours pensé que c'était un problème de sécurité (car un attaquant pourrait essayer de lire des choses qui ne sont pas les leurs).
Maintenant, je dois vérifier si l'utilisateur est autorisé à accéder de toute façon, y a-t-il une raison différente derrière cela?
De plus, comme mes utilisateurs doivent accéder aux données de toute façon, il me faudra une clé publique pour le monde extérieur quelque part entre les deux. Maintenant, cette clé publique a les mêmes problèmes que la clé primaire, n'est-ce pas?
Il y a eu la demande d'un exemple sur pourquoi faire cela de toute façon, alors en voici un. Gardez à l'esprit que la question concerne le principe lui-même et pas seulement s'il s'applique dans cet exemple. Les réponses à d'autres situations sont explicitement les bienvenues.
Application (Web, mobile) qui gère l’activité, a plusieurs interfaces utilisateur et au moins une API automatisée pour la communication intersystème (par exemple, le service de la comptabilité veut savoir combien facturer le client en fonction de ce qui a été fait). L'application ayant plusieurs clients, la séparation de leurs données (logiquement, les données sont stockées dans le même DB) est un élément essentiel du système. Chaque demande sera vérifiée pour la validité, peu importe quoi.
L'activité est très fine, de sorte qu'elle se trouve dans un objet conteneur, appelons-la "tâche".
Trois cas d'utilisation:
- L'utilisateur A veut envoyer l'utilisateur B à une tâche de sorte qu'il lui envoie un lien (HTTP) pour y effectuer une activité.
- L'utilisateur B doit sortir du bâtiment pour qu'il ouvre la tâche sur son appareil mobile.
- La comptabilité veut facturer la tâche au client, mais utilise un système comptable tiers qui charge automatiquement la tâche / activité à l'aide d'un code faisant référence à l'API REST de l'application.
Chaque cas d'utilisation nécessite (ou devient plus facile si) l'agent d'avoir un identificateur adressable pour la tâche et l'activité.
ON UPDATE CASCADE
été conçu pour cela (spécifique à mysql?), bien que si le problème est lié à la sécurité, la vérification de l'accès doit être effectuée sur le serveur principal et ne doit en aucun cas faire confiance à l'utilisateur