¿Se debe exponer una clave sustituta a un usuario?

13

A menudo, en una tabla que no tiene una clave natural, sigue siendo útil para los usuarios poder tener un identificador generado de forma única. Si la tabla tiene una clave primaria sustituta (y, en ese caso, seguramente lo esperaría), ¿debería esa clave estar expuesta al usuario o debería usarse otro campo para ese propósito?

Una razón para no exponer la clave sustituta es que ahora no puede realizar operaciones que preserven la relación entre los registros, sino cambiar los valores clave, como ciertos tipos de eliminación / reinserción, muchos métodos para copiar datos de una base de datos a otra, etc.

La principal ventaja de exponer la clave sustituta es la simplicidad de usar un campo que tienes de todos modos.

¿En qué circunstancias es mejor exponer directamente la clave sustituta a los usuarios?

    
pregunta psr 10.07.2013 - 22:51

7 respuestas

10

Debe estar listo para cualquier identificador que esté expuesto a los usuarios / clientes que necesitan ser cambiados, y cambiar la identidad de una fila en una base de datos y propagar ese cambio a todas las claves externas es solo pedir datos.

Si los datos no tienen una clave de negocio natural, puede agregar un campo adicional para un "identificador de negocio". Esto debería optimizarse para los procesos para los que se utiliza. La entrada del teclado del teléfono significa numérico solamente. Por teléfono / verbal significa evitar símbolos de sonido similares (B / D, M / N, etc.). Incluso puede autogenerar alguna frase fácil de recordar ("jalea verde").

El efecto de esto es que la empresa puede cambiar posteriormente la forma en que desean referirse a los registros, y el único cambio de esquema de datos es agregar una nueva columna para ese estilo de identificación o transformar las identificaciones que ya están allí. El cambio no se propaga a través de toda la base de datos, y aún tiene un ID (el sustituto) que es válido en el tiempo.

En resumen, evitaría exponer claves sustitutas a los usuarios. Como señalan los comentarios, las claves sustitutas casi nunca deben cambiar. Por el contrario, las empresas quieren cambiar todo. Si la clave sustituta está expuesta, es solo una cuestión de tiempo antes de que la empresa quiera cambiarla.

Como nota al margen, cuando digo "exponer" aquí, me refiero a darle la clave al usuario con la expectativa de que la use directamente (como llamar al servicio de asistencia con su número de pedido ).

    
respondido por el Chris Pitman 10.07.2013 - 23:02
4

En algunos casos, se esperan claves sustitutas y tienen sentido para los usuarios. Mi ejemplo favorito es "número de pedido". El número de pedido no es realmente una clave natural: una clave natural puede ser la marca de tiempo más el usuario, o quizás más que eso si espera que los usuarios generen más de un pedido dentro de la granularidad de su marca de hora.

No obstante, los usuarios entienden y esperan la conveniencia de un número de pedido. No hay daño, y mucho valor, si informas a los usuarios sobre ellos.

Por otro lado, algunas claves sustitutas no tienen sentido para un usuario. Claro, mi compañía de seguros de salud tiene una clave sustituta que me identifica según mi identificación de miembro, fecha de nacimiento, proveedor, etc., pero eso no me importa, me importa la información en mi tarjeta (que a menudo incluye las identificaciones basadas en en mi empleador y no son únicos en todo el universo ... De ahí la clave sustituta en la compañía de seguros).

    
respondido por el Alan Shutko 11.07.2013 - 04:13
1

Solo debe exponer una clave sustituta si es un GUID / UUID * correctamente generado. Exponer las claves sustitutas secuenciales es número 4 en el OWASP Top 10 de seguridad.

* En la práctica, es mejor suponer que no se generó correctamente para estos fines, a menos que sepa que fue creado por un generador de números aleatorios o pseudoaleatorios criptográficamente seguros.

    
respondido por el Peter Taylor 11.07.2013 - 19:17
1

Si una tabla no tiene una clave natural, las claves sustitutas permiten filas como esta.

surrogate_key  some_name
--
1              Wibble
2              Wibble
...
17             Wibble
...
235            Wibble

Llamaría a estas claves artificiales en lugar de claves sustitutas, pero esa distinción no es importante para esta pregunta.

Ahora, asumiendo que hay datos importantes que hacen referencia a estas claves sustitutas a través de claves externas, ¿cómo sabrían los usuarios finales qué fila actualizar si no conocen los valores de las claves sustitutas?

    
respondido por el Mike Sherrill 'Cat Recall' 12.07.2013 - 17:07
0

En palabras sencillas:

  • Los sustitutos deben estar ocultos para el usuario.
  • Debería exponer otra clave de candidato comercial al usuario.
  • Si no existe otra clave candidata, debe mostrar el PK. Pero en este caso, la PK no se considera un sustituto ya que no es un sustituto de otra columna.
respondido por el Tulains Córdova 11.07.2013 - 00:47
0

SOLO debe exponer un campo a un usuario que proporciona información útil para el usuario, ya sea directamente o informándole de defectos.

a la inversa, SIEMPRE debe exponer "claves primarias sustitutas" cuando son el principal medio para identificar un registro (simple o complejo) para una interacción que realiza el usuario.

    
respondido por el DougM 11.07.2013 - 03:59
0

No debería importar si expone las claves o no al usuario final. Su aplicación debe realizar la autorización necesaria para que, simplemente, saber un ID de pedido, por ejemplo, no les permita acceder a algo a lo que normalmente no tendrían acceso.

advertencia: esto supone una aplicación basada en web o de n niveles donde la autorización del lado del servidor es posible / factible. Si tiene una aplicación de VB que se ejecute directamente en SQL, eso es todo un problema 'nother.

    
respondido por el GrandmasterB 12.07.2013 - 23:03

Lea otras preguntas en las etiquetas