En mi educación me han dicho que es una idea defectuosa exponer las claves primarias reales (no solo las claves DB, sino todos los accesos primarios) al usuario.
Siempre pensé que era un problema de seguridad (porque un atacante podría intentar leer cosas que no fueran suyas).
Ahora tengo que verificar si el usuario tiene acceso de todos modos, ¿hay alguna razón diferente detrás?
Además, como mis usuarios tienen que acceder a los datos de todos modos, necesitaré tener una clave pública para el mundo exterior en algún punto intermedio. Ahora que la clave pública tiene los mismos problemas que la clave primaria, ¿no?
Se ha solicitado un ejemplo de por qué hacerlo de todos modos, así que aquí hay uno. Tenga en cuenta que la pregunta tiene que ver con el principio en sí, no solo si se aplica en este ejemplo. Las respuestas a otras situaciones son explícitamente bienvenidas.
La aplicación (web, móvil) que maneja la actividad, tiene múltiples IU y al menos una API automatizada para la comunicación entre sistemas (por ejemplo, el departamento de contabilidad quiere saber cuánto cobrar al cliente en función de lo que se ha hecho). La aplicación tiene varios clientes, por lo que la separación de sus datos (lógicamente, los datos se almacenan en el mismo DB) es imprescindible para el sistema. Se verificará la validez de cada solicitud sin importar qué.
La actividad es muy fina, por lo que está unida en algún objeto contenedor, llamémosla "Tarea".
Tres casos de uso:
- El usuario A quiere enviar al usuario B a alguna tarea, por lo que le envía un enlace (HTTP) para realizar alguna actividad allí.
- El usuario B debe salir del edificio para abrir la tarea en su dispositivo móvil.
- Contabilidad quiere cobrar al cliente por la Tarea, pero utiliza un sistema de contabilidad de terceros que carga automáticamente la Tarea / Actividad mediante un código que hace referencia a la REST - API de la Aplicación
Cada uno de los casos de uso requiere (o se hace más fácil si) que el agente tenga algún identificador direccionable para la Tarea y la Actividad.
ON UPDATE CASCADE
se hizo para eso (¿mysql específico?), aunque si el problema es la seguridad, entonces la verificación de acceso debería estar en el backend y no confiar en el usuario de todos modos