2012-06-20 8 views
18

Ich frage mich, warum viele Websites wählen zufällige ID: s anstelle der Erhöhung von 1 auf ihre Datenbanktabellen. Ich habe gesucht, ohne irgendwelche guten Gründe zu finden. Gibt es welche?Warum neigen Websites dazu, zufällige IDs in Datenbanktabellen zu verwenden?

Auch, welches ist die beste Methode zu verwenden? Es scheint ziemlich ineffizient zu sein, vor dem Einfügen der Daten zu prüfen, ob eine ID existiert (nimmt eine zweite Abfrage).

Danke für Ihre Hilfe!

+0

Nur um Sicherheitsbedrohungen zu vermeiden, die auf inkrementellen Wertemengen basieren – swapnesh

+1

Incrementing ids leckt Informationen über Transaktionsraten, wenn diese dem Client ausgesetzt sind. z.B. Anzahl der neuen Benutzer, die sich jeden Tag registrieren. –

+2

"zufällige" ID oder GUID-ID? –

Antwort

8

Unter der Haube ist es wahrscheinlich, dass sie inkrementelle IDs in der Datenbank verwenden, um Zeilen zu identifizieren, aber der Wert, der Endbenutzern über die URL-Parameter ausgesetzt ist, wird oft in eine zufällige Zeichenfolge gemacht, um die Sequenz verfügbar zu machen Objekte sind schwerer zu erraten.

Es ist wirklich eine Frage der Sicherheit durch Unklarheit. Es hindert automatisierte Skripts daran, inkrementelle Werte zu durchlaufen und Angriffe über die URL zu versuchen, und es verhindert das automatisierte Scrappen von Websiteinhalt.

Wenn youtube z. B. inkrementelle IDs anstelle von Werten wie v=HSsdaX4s verwendet, können Sie alle herunterladen, indem Sie einfach bei v=1 beginnen und diesen Wert millionenfach inkrementieren.

+0

Worauf kommt es bei inkrementellen IDs an? Sie verwenden v = HSsdaX4s, wenn Sie die Zeile aus der Tabelle abrufen. Gibt es wirklich Bedarf für inkrementelle IDs? – lawls

+2

@lawls In großem Maßstab kann es rechnerische Einsparungen bei der Indexierung der Ganzzahlfelder geben, insbesondere wenn man bedenkt, dass sie wahrscheinlich als Fremdschlüsselspalten in vielen anderen verwandten Tabellen verwendet werden, nicht nur in der Haupttabelle. Tatsächlich ist incremental ids nur das Standardverhalten vieler, vieler Webframeworks und ORMs und ein natives Verhalten des RDBMS, um die Autoinkrement-IDs zu generieren und sie unmittelbar nach dem 'INSERT' zurückzugeben. In einem kleinen Maßstab erhalten Sie nur den Komfort, Ihr ORM nicht neu konfigurieren zu müssen. Sie müssen immer noch den Algorithmus schreiben, um Ihre String-IDs zu generieren. –

4

Sequenzielle IDs skalieren nicht gut (in verteilten Systemen werden sie zu einem Synchronisationsengpass).

Sie müssen auch nicht überprüfen, ob eine neu generierte Random-ID bereits existiert, Sie können einfach davon ausgehen, dass dies nicht der Fall ist (weil es so viele davon gibt).

1

Sind Sie sicher, dass die IDs zufällig sind? oder sind sie codiert? So oder so ist es für die Sicherheit.

+0

Ich weiß nicht, ob sie zufällig sind, aber Stack Overflow ist ein perfektes Beispiel. Es ist wahrscheinlich keine Frage mit einer ID von 1, alle Fragen haben id: s von 8 Zahlen, soweit ich gesehen habe. –

+0

@piers - [Wie wäre es mit diesem] (http://stackoverflow.com/questions/4/when-setting-a-forms-opacity-should-i-use-a-decimal-o-double) oder [this one] (http://stackoverflow.com/questions/6/why-doesnt-the-percentage-width-child-in-absolut-positioned-parent-work-in-i-) Sortiere die Fragen einfach nach Datum und gehe dann zu die letzte Seite. –

+0

@MartinSmith Danke, mein Fehler. –

Verwandte Themen