¿Es esta lógica seguridad / rendimiento inteligente o no?

2

Cada usuario físico tendrá aproximadamente 20 tablas en la base de datos.

Cuando un nuevo usuario se registra, se crearán otras 20 tablas con acceso solo para su nueva cuenta MySQL.

Los datos no tienen que ser compartidos entre los usuarios.

¿Es esta lógica más segura que tener solo 20 tablas para todos los usuarios? ¿Y el rendimiento estará muerto o no?

EDIT

Solo quiero asegurarme de que un usuario al que le guste "jugar" con inyecciones y encuentre la forma de evitarlo no pueda acceder a los datos de otros usuarios.

    
pregunta Stelios Joseph Karras 08.08.2012 - 13:39
fuente

2 respuestas

2

Este es un mal diseño (o ningún diseño en absoluto)

Debería modelar sus tablas como si creara clases en programación orientada a objetos: cada clase / tabla representa un concepto, por lo que debe tener una tabla de usuario y algunos permisos en otras tablas para cada usuario.

Merise es un método excelente para diseñar bases de datos (y mucho más, pero se usa principalmente para diseñar bases de datos hoy en día). Me temo que es una excepción cultural francesa, ya que ningún otro país parece usarla, pero si encuentra recursos en su idioma, sería de gran ayuda para sus diseños.

    
respondido por el jmn 08.08.2012 - 14:17
fuente
2

Dado que esto es seguridad .stackexchange.com, me centraré en la pregunta de seguridad. (Estoy de acuerdo con otros pósters / comentaristas: este generalmente no es un buen diseño para el mantenimiento a largo plazo. Es probable que no sea excelente para el rendimiento, pero es imposible saberlo sin saber exactamente cómo lo consultan los usuarios, incluido usted y el administrador. )

Desde un punto de vista de seguridad, separar los datos del usuario en diferentes tablas en MySQL solo tendrá beneficios si también configura cuentas de usuario individuales para cada usuario en MySQL, y luego configura sus permisos de manera explícita para que solo puedan acceder a esas tablas. En ese momento, los permisos se convierten en un gran lío para realizar un seguimiento, validar y corregir, pero mitigaría el riesgo de un ataque de inyección SQL .

Sería conceptualmente más fácil darle a cada usuario su propio esquema (o "base de datos" en el lenguaje de MySQL) y otorgarle privilegios a todo su esquema. Esto hace que los privilegios sean mucho más fáciles de auditar y aún mitiga el riesgo de la inyección de SQL.

Este último concepto no es del todo loco: muchos servidores están configurados de esta manera para ejecutar varias aplicaciones respaldadas por bases de datos en el mismo servidor sin permitirles acceder a los datos de los demás. Si tiene sentido en su caso depende, en gran medida, de cuántos usuarios tenga.

No estoy promocionando tu diseño; simplemente señalando los pros / contras.

    
respondido por el Mark E. Haase 08.08.2012 - 18:20
fuente

Lea otras preguntas en las etiquetas