Djangos Primärschlüssel mit eindeutigen Ganzzahlbezeichnern verschleiern
In Django ist der Primärschlüssel normalerweise eine automatisch inkrementierte Ganzzahl, die als eindeutig dient Bezeichner für jede Zeile in einer Tabelle. Allerdings kann die Offenlegung dieses Schlüssels in URLs oder anderen öffentlich zugänglichen Kontexten den Datenschutz und die Sicherheit gefährden. In diesem Artikel wird ein alternativer Ansatz zur Verschleierung des Primärschlüssels unter Beibehaltung seiner Einzigartigkeit untersucht.
Anforderungen
Ansatz
Um diesen Anforderungen gerecht zu werden, wird eine Lösung vorgeschlagen, die dem ID-Generierungssystem von Instagram ähnelt. Bei diesem Ansatz werden eindeutige IDs generiert, die aus einer zeitbasierten Komponente und einer Zufallskomponente bestehen.
Funktion zur ID-Generierung
import time import random START_TIME = int(time.time() * 1000) # Some constant timestamp def make_id(): t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id def reverse_id(id): t = id >> 23 return t + START_TIME
Die Funktion make_id generiert eindeutige IDs mithilfe von eine zeitbasierte 41-Bit-Komponente und eine 23-Bit-Zufallskomponente. Die Funktion „reverse_id“ ermöglicht das Extrahieren des Zeitstempels aus der generierten ID.
Modell
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
Durch Verwendung der Funktion „make_id“ als Standardwert für das Feld „id“, neu Datensätzen werden beim Einfügen eindeutige IDs zugewiesen. Dieser Ansatz stellt sicher, dass das Feld „Primärschlüssel“ seinen ganzzahligen Datentyp beibehält, während seine sequentielle Natur verschleiert wird. Darüber hinaus verhindert die Zufallskomponente der ID Kollisionen auch bei gleichzeitigen Einfügungen.
Verwendung
Mit dieser Implementierung sind die Primärschlüsselwerte eindeutige Ganzzahlen, die präzise und prägnant sind beständig gegen Einwirkungen unter Beibehaltung ihrer primären Schlüsselfunktionalität.
Das obige ist der detaillierte Inhalt vonWie kann ich den Primärschlüssel von Django mithilfe eindeutiger Ganzzahlbezeichner sicher verschleiern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!