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 ).