Souvent dans une table qui n'a pas de clé naturelle, il est toujours utile pour les utilisateurs d'avoir un identifiant généré de manière unique. Si la table a une clé primaire de substitution (et dans ce cas, vous vous en doutez certainement), cette clé devrait-elle être exposée à l'utilisateur ou un autre champ devrait-il être utilisé à cette fin?
Une raison de ne pas exposer la clé de substitution est que vous ne pouvez plus effectuer d'opérations qui préservent la relation entre les enregistrements, mais modifier les valeurs de clé, telles que certains types de suppression / réinsertion, de nombreuses méthodes de copie de données d'une base de données vers un autre, etc.
Le principal avantage d'exposer la clé de substitution est la simplicité d'utilisation d'un champ que vous avez de toute façon.
Dans quelles circonstances est-il préférable d'exposer directement la clé de substitution aux utilisateurs?
Réponses:
Vous devez être prêt pour tout identificateur exposé aux utilisateurs / clients devant être modifiés, et changer l'identité d'une ligne dans une base de données et propager ce changement à toutes les clés étrangères demande simplement de casser les données.
Si les données n'ont pas de clé d'entreprise naturelle, vous pouvez ajouter un champ supplémentaire pour un "identifiant d'entreprise". Cela devrait être optimisé pour les processus pour lesquels il est utilisé. La saisie au clavier du téléphone signifie uniquement numérique. Au téléphone / verbal, évitez les symboles similaires (B / D, M / N, etc.). Vous pouvez même générer automatiquement une phrase facilement mémorisable ("gelée verte").
Cela a pour effet que l'entreprise peut modifier ultérieurement la manière dont elle souhaite faire référence aux enregistrements, et la seule modification du schéma de données consiste à ajouter une nouvelle colonne pour ce style d'ID ou à transformer les ID déjà présents. Le changement ne se propage pas à travers la base de données entière et vous avez toujours un identifiant (le substitut) qui est valide dans le temps.
En bref, j'éviterais d'exposer des clés de substitution aux utilisateurs. Comme le soulignent les commentaires, les clés de substitution ne devraient presque jamais changer. À l'inverse, les entreprises veulent tout changer. Si la clé de substitution est exposée, ce n'est qu'une question de temps avant que l'entreprise veuille la changer.
En guise de remarque, lorsque je dis «exposer» ici, je veux donner la clé à l'utilisateur dans l'attente qu'il l' utilise directement (comme appeler pour prendre en charge avec son numéro de commande).
la source
Dans certains cas, des clés de substitution sont attendues et ont un sens pour les utilisateurs. Mon exemple préféré est "numéro de commande". Le numéro de commande n'est pas vraiment une clé naturelle: une clé naturelle peut être l'horodatage plus l'utilisateur, ou peut-être plus que cela si vous vous attendez à ce que les utilisateurs génèrent plus d'une commande dans la granularité de votre horodatage.
Néanmoins, les utilisateurs comprennent et attendent la commodité d'un numéro de commande. Il n'y a aucun mal et beaucoup de valeur si vous en informez les utilisateurs.
D'un autre côté, certaines clés de substitution n'ont aucun sens pour un utilisateur. Bien sûr, ma compagnie d'assurance maladie a une clé de substitution qui m'identifie en fonction de mon identifiant de membre, de ma date de naissance, de mon porteur, etc., mais je m'en fiche, je me soucie des informations sur ma carte (qui comprend souvent sur mon employeur et ne sont pas uniques à travers l'univers ... D'où la clé de substitution à la compagnie d'assurance).
la source
Vous ne devez exposer une clé de substitution que s'il s'agit d'un GUID / UUID * correctement généré. L'exposition des clés de substitution séquentielles est le numéro 4 des 10 principaux problèmes de sécurité OWASP.
* En pratique, il est préférable de supposer qu'il n'a pas été correctement généré à ces fins, sauf si vous savez qu'il a été créé par un générateur de nombres aléatoires ou pseudo-aléatoires cryptographiquement sécurisé.
la source
Si une table n'a pas de clé naturelle, les clés de substitution autorisent des lignes comme celle-ci.
J'appellerais ces clés artificielles au lieu de clés de substitution, mais cette distinction n'est pas importante pour cette question.
Maintenant, en supposant qu'il existe des données importantes référençant ces clés de substitution via des clés étrangères, comment les utilisateurs finaux sauraient- ils quelle ligne mettre à jour s'ils ne connaissent pas les valeurs de clé de substitution?
la source
Dans les mots du profane:
la source
vous devez UNIQUEMENT exposer un champ à un utilisateur qui fournit des informations utiles à l'utilisateur, soit directement, soit pour vous signaler des défauts.
à l'inverse, vous devez TOUJOURS exposer les «clés primaires de substitution» lorsqu'elles sont le principal moyen d'identifier un enregistrement (simple ou complexe) pour une interaction que l'utilisateur effectue.
la source
Peu importe que vous exposiez les clés ou non à l'utilisateur final. Votre application doit effectuer l'autorisation nécessaire de telle sorte que le simple fait de connaître un identifiant de commande, par exemple, ne puisse pas lui permettre d'accéder à quelque chose auquel il n'aurait normalement pas accès.
mise en garde: cela suppose une application Web ou à plusieurs niveaux où l'autorisation côté serveur est possible / faisable. Si vous avez une application VB qui exécute directement SQL, c'est un tout autre problème.
la source