Clés primaires entières uniques dans Django : atteindre la confidentialité sans sacrifier la vitesse
Les clés primaires exposées peuvent poser des problèmes de sécurité. Pour résoudre ce problème, les développeurs cherchent souvent à remplacer la clé primaire auto-incrémentée par défaut par un entier unique qui n'est pas facilement devinable ou énumérable. Bien que le hachage de la clé d'origine soit une solution courante, cela entraîne une surcharge de performances et la nécessité d'une conversion à chaque accès à la clé.
Dans cet article, nous présentons une approche alternative inspirée de l'approche d'Instagram. Notre solution génère une clé entière unique qui répond aux critères suivants :
Mise en œuvre
Génération des identifiants :
START_TIME = <unix timestamp constant> def make_id(): t = int(time.time()*1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23 ) | u return id
Le Modèle :
class MyClass(models.Model): id = models.BigIntegerField(default = fields.make_id, primary_key=True)
Avantages
Cette approche répond efficacement aux préoccupations soulevées tout en répondant aux exigences spécifiques d'un système unique. clé primaire entière sans compromettre les performances ou l'efficacité du stockage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!