Question

Il y a une discussion sur mon équipe de mettre à jour les données de l'entité et la meilleure façon de l'aborder. Ceci est un cadre de sécurité et donc voici quelques-unes des contraintes et des idées.

  1. toutes les tables DB a une PK qui est guid, cela est nécessaire pour notre solution de cluster à plusieurs nœuds. L'idée est que nous ne voulons pas exposer ce sur une entité à un client via une API, car il pourrait faire deux choses,
    1. leur donner plus d'informations que nécessaire pour leur travail et de donner plus d'informations sur le système des pirates.
    2. cauchemar de soutien est qu'un client à hardcodes cet ID d'une certaine façon et si nous devons changer sont impactés de nos PK clients.

solutions pour exposer la clé natual des éléments comme objet de rôle avec un nom unique et royaume, ainsi que guarentee unique actualisent cependant l'une de ces valeurs est le défi, parce que vous devez spécifier les valeurs anciennes et nouvelles à jour, ou passer deux objets dans l'objet original et nouveau, afin que nous puissions trouver une mise à jour. sorte de désordre,

Une autre approche est de faire une clé alternative et ont exposé à ce client, ils peuvent l'utiliser tout ce qu'ils veulent et nous ne se soucient pas parce que ce ne soit pas lié à notre PK.

il semble que chacun utilise ces jours-ci juste PK comme ID pour les entités sans problème, pas sûr de savoir comment convaincre notre équipe de veterns des anciens jours de programmation timey.

Une autre question est de savoir comment soutenir les mises à jour partielles, problème est que vous avez entité avec 10 propriétés, 4 collections, etc ... avec un nom + combo domaine et spécifier les propriétés à mettre à jour au lieu de tirer vers le bas changement 1 champ entier de l'objet , renvoyer la mise à jour. Je dis charge paresseux les collections, mais ne sais pas si la mise à jour partielle est logique.

pensées?

merci!

Était-ce utile?

La solution

Mon approche d'un cadre de sécurité serait comme ceci:

  • Donner quoi que ce soit dans la base de données un ID interne (colonne d'identité, séquence, quel que soit votre support de base de données. « Natif généré colonne id » dans Hibernate parler). Finalement, vous allez en avoir besoin et à rétro-ajustement est beaucoup de travail.

  • Si vous devez remettre une pièce d'identité à l'utilisateur, générer un nombre aléatoire, vérifier qu'il n'a pas déjà été utilisé, connectez-le à un ID interne, puis le remettre à l'utilisateur. Jamais main sur l'ID interne et jamais ID d'utilisation qui peuvent être devinés par des crackers.

En ce qui concerne les mises à jour partielles, ils ne commencent à donner un sens si vous avez beaucoup d'objets avec beaucoup d'attributs. 10 attributs, je dirais " optimisation prématurée ."

Autres conseils

Utilisez la touche naturelle si vous avez besoin d'exposer id au client. Il est pas si facile à mettre en œuvre, mais c'est la bonne façon.

Pouvez-vous fournir peu plus de détails au sujet de ces mises à jour partielles? Je ne comprenais pas. : /

Utilisation GUIDs sur chaque table comme une clé primaire semble avoir des ennuis. Je ne l'ai pas vu cette approche partout à moins que je suis vraiment malentendu. Pourquoi ne pas émettre juste un UID à chaque utilisateur et le travail avec l'UID?

Cette approche est la plus courante dans toutes les entreprises. L'UID est pas PII si vous êtes légalement correct comme cela a été que d'un point de vue de la sécurité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top