2012-06-20 6 views
18

Mi chiedo perché molti siti Web scelgano di usare id casuali: s invece di incrementare da 1 sulle loro tabelle di database. Ho cercato senza trovare buoni motivi, ce ne sono?Perché i siti Web tendono a utilizzare ID casuale: s sulle tabelle del database?

Inoltre, che è il metodo migliore da usare? Sembra abbastanza inefficiente per verificare se un ID esiste già prima di inserire i dati, (richiede una seconda query).

Grazie per il vostro aiuto!

+0

solo per evitare eventuali minacce alla sicurezza che basano sui set di valori incrementali – swapnesh

+1

ids addizionante fughe di informazioni circa i tassi di transazione se questi sono esposti al cliente. per esempio. numero di nuovi utenti che si registrano ogni giorno. –

+2

ID "casuale" o ID GUID? –

risposta

8

Sotto il cofano, è probabile che utilizzino ID incrementali nel database per identificare le righe, ma il valore che viene esposto agli utenti finali tramite i parametri URL viene spesso trasformato in una stringa casuale per rendere disponibile la sequenza di oggetti più difficili da indovinare.

E 'davvero una questione di sicurezza attraverso l'oscurità. Impedisce agli script automatizzati di procedere attraverso valori incrementali e tentativi di attacchi tramite l'URL e ostacola lo scraping automatico del contenuto del sito.

Se YouTube, ad esempio, utilizzato ids incrementali invece di valori come v=HSsdaX4s, si potrebbe scaricare ogni semplicemente a partire dalle v=1 e incrementando che milioni di valore di volte.

+0

Qual è il punto degli ID incrementali? Userai v = HSsdaX4s quando ricevi la riga dalla tabella. Quindi c'è davvero bisogno di ID incrementali? – lawls

+2

@lawls A larga scala, potrebbero esserci dei risparmi computazionali che indicizzano i campi interi, soprattutto considerando che sono probabilmente usati come colonne di chiavi esterne in molte altre tabelle correlate, non solo nella tabella principale. In realtà, tuttavia, gli ID incrementali sono solo il comportamento predefinito di molti, molti framework Web e ORM e un comportamento nativo di RDBMS per generare gli ID di incremento automatico e restituirli immediatamente dopo "INSERT". Quindi su piccola scala ottieni solo la comodità di non dover riconfigurare il tuo ORM. Devi comunque scrivere l'algoritmo per generare i tuoi ID stringa in entrambi i modi. –

4

ids sequenziali non scala bene (diventano un collo di bottiglia sincronizzazione in sistemi distribuiti).

Inoltre, non è necessario verificare se un ID casuale appena generato esiste già, si può solo supporre che non lo fa (perché ci sono così tanti di loro).

1

Sei sicuro che l'ID di sono casuali? o sono codificati? In ogni caso è per la sicurezza.

+0

Non so se sono casuali, ma Stack Overflow è un esempio perfetto. Probabilmente non c'è una domanda con un id di 1, tutte le domande hanno id: s di 8 numeri, per quanto ho visto. –

+0

@piers - [come circa questo] (http://stackoverflow.com/questions/4/when-setting-a-forms-opacity-should-i-use-a-decimal-or-double) o [questo uno] (http://stackoverflow.com/questions/6/why-doesnt-the-percentage-width-child-in-absolutely-positioned-parent-work-in-i) Basta ordinare le domande per data quindi andare a l'ultima pagina. –

+0

@MartinSmith Grazie, mio ​​errore. –

Problemi correlati