Me preguntaba cuáles eran las mejores prácticas para crear y almacenar ID. Hace unos años, un profesor me habló de los peligros de un sistema de identificación mal construido, utilizando como ejemplo el número de la Seguridad Social. En particular, debido a que los SSN no tienen ninguna detección de error ... es imposible distinguir la diferencia entre una cadena de 9 dígitos y una SSN válida. Y ahora las agencias gubernamentales necesitan cosas como Apellido + SSN o Cumpleaños + SSN para realizar un seguimiento de sus datos y garantizar su verificación. Además, su número de seguro social es un tanto predecible según el lugar donde nació.Mejores prácticas de identificación para bases de datos
Ahora estoy construyendo una base de datos de usuario ... y en base a este consejo "userid mediumint auto_increment" sería inaceptable. Especialmente si planeo usar este ID como la identificación primaria para el usuario. (por ejemplo, si permito a los usuarios cambiar su nombre de usuario, entonces sería más difícil hacer un seguimiento del nombre de usuario que el ID de usuario numérico ... que requiere claves en cascada y demás). Los correos electrónicos cambian, los nombres de usuario pueden cambiar, las contraseñas cambian. .pero un usuario debe permanecer constante para siempre.
Claramente, auto_increment está diseñado solo para surrogate_keys. Es decir, es un acceso directo útil solo cuando ya tiene un mecanismo de identificación principal, pero no debe usarse como un "identificador innato" para los datos. Crear UUID aleatorio parece interesante, pero la aleatoriedad me apaga.
Y entonces pregunto: ¿cuáles son las mejores prácticas para crear un número de identificación de "clave principal"?
¿Qué hay de los consejos de su profesor que le llevaron a la conclusión de que los números enteros de auto incremento no eran apropiados como identificadores únicos para los datos del usuario? – jwiscarson
Los enteros de incremento automático son predecibles y no contienen ninguna forma de detección de errores. Por lo menos, esperaría que una práctica de ID de "grado profesional" fuera algo impredecible y autoidentificable. Por ejemplo, los números de la tarjeta de crédito tienen un dígito de suma de comprobación, lo que significa que si un ser humano ingresa incorrectamente una tarjeta de crédito, solo hay una probabilidad de 1/10 de que sea aceptada. También son razonablemente impredecibles, por lo que un hacker no puede simplemente ingresar números de tarjetas de crédito al azar en Amazon y esperar que incluso tenga un número de tarjeta de crédito válido. Del mismo modo, un pirata informático no debe criticar ataques de diccionario en UID predecibles. – Dragontamer5788
No entiendo su comparación aquí. Me sorprendería si las compañías de tarjetas de crédito usaran números reales de tarjetas de crédito como ID de bases de datos, en lugar de almacenarlos como un atributo fuertemente asegurado en una tabla. Su comentario implica que el conocimiento de una ID sería una especie de puerta trasera en la base de datos. La autenticación de algún tipo debe ser la defensa contra el acceso no autorizado a los datos, no el conocimiento de los valores aleatorios de la base de datos. – jwiscarson