MySQL Access Control?

2

He leído en alguna parte que es mejor tener dos inicios de sesión MySQL diferentes para evitar la piratería. Lo que quiero decir es tener un inicio de sesión en MySQL para el acceso de lectura (permiso SELECCIONAR) y otro inicio de sesión para el acceso de escritura (permiso INSERTAR, ACTUALIZAR, CREAR y BORRAR). ¿Es beneficioso tener una configuración como esta y funcionaría con algo como un script PHP?

    
pregunta ub3rst4r 09.03.2013 - 19:51
fuente

2 respuestas

4

Los desarrolladores hacen errores. Un tipo de error (lamentablemente) bastante común en aplicaciones web con PHP y SQL son las inyecciones de SQL. Una consecuencia de dicho error es que los forasteros hostiles pueden inyectar un código SQL arbitrario para ser evaluado por la base de datos.

Si tiene dos cuentas para acceder a la base de datos y una de ellas solo tiene permisos de lectura, entonces cualquier error de inyección de SQL en las solicitudes realizadas por esa cuenta de solo lectura específica solo otorgará acceso de solo lectura al atacante.

Eso es como las puertas interiores de un submarino. Estas puertas están diseñadas para resistir la presión y se cerrarán en caso de emergencia. De esa manera, si se perfora el casco, entonces el agua solo inundará parte del submarino, que luego se hundirá más lentamente, y las posibilidades de supervivencia de la tripulación mejorarán considerablemente. El uso de cuentas de lectura y escritura separadas para MySQL es el mismo tipo de protección. Sin embargo, todavía preferirías no ser golpeado por un torpedo; es decir, es mejor si no permite que se realicen inyecciones de SQL, utilizando SQL correctamente (con declaraciones preparadas ).

    
respondido por el Tom Leek 09.03.2013 - 20:03
fuente
0

Es difícil de seguir, pero ¿has considerado algo similar al modelo MAC

El modelo se basa en, los permisos de usuarios o grupos se deciden en nivel de autorización y niveles de clasificación de datos .

Por ejemplo, si el nivel de autorización del sujeto domina el nivel de clasificación de datos (para una cierta tupla en db), se le denegará la entrada. Las filas se devuelven SOLAMENTE si hay una coincidencia exitosa de nivel de clasificación y nivel de claridad coincidente.

Lo que significa que una inyección de sql exitosa le daría al atacante solo acceso a un subconjunto de datos o dependiendo de cómo se ejecute el ataque en los casos que le devolverían resultados absolutos (falla de privilegio) . Efectivamente cancelas la superficie de ataque a través de esta técnica.

    
respondido por el Saladin 09.03.2013 - 20:23
fuente

Lea otras preguntas en las etiquetas