1

¿Cómo puedo restringir los privilegios que tiene un usuario para evitar posibles inyecciones sql?

Camilo Caroxh
  • 159
  • 1
  • 8
  • 1
    No sirve de mucho. Como mínimo un usuario deberá tener privilegios para consultas del tipo `SELECT` ¿no? Pues hay *Inyección SQL* del tipo `SELECT` en las que un hacker podría obtener el nombre de usuario administrador y su contraseña y acceder a la base de datos. Además, la Inyección SQL puede llegar a modificar archivos del sistema... No es que esté mal tu idea, pero servirá de poco si no usas consultas preparadas. – A. Cedano Nov 01 '19 at 17:19
  • 1
    En MySQL la consulta para otorgar privilegios es algo así: `GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';` ahí se le da un privilegio `SELECT` a Jeffrey en la tabla invoice. [Revisa el MR de MySQL](https://dev.mysql.com/doc/refman/8.0/en/grant.html) donde viene todo explicado. Pero repito, no creas que con hacer eso estás protegido contra *Inyección SQL*. – A. Cedano Nov 01 '19 at 17:22

1 Answers1

7

En MySQL usa GRANT para otorgar privilegios a los usuarios sobre las bases de datos y/o las tablas.

Por ejemplo:

GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost'; 

Otorga privilegio SELECT a jeffrey en la tabla invoice de la base de datos db2

Toda la explicación sobre los privilegios se encuentra en el Manual de Referencia de MySQL.

No es que esté mal tu idea, y si un usuario no debe tener acceso a borrar o a insertar debes prohibirle ese acceso. El problema es que una Inyección SQL puede ocurrir desde cualquier consulta que se logre ejecutar en la base de datos. Sólo por poner un ejemplo, imaginemos que otorgas un privilegio mínimo al usuario, que sería SELECT. Una inyección SQL podría consistir en lanzar un SELECT sobre la tabla de usuarios, donde un usuario mal intencionado podría obtener los nombres y contraseñas de usuarios de la base de datos o de otras áreas de la aplicación, o cualquier otro tipo de dato sensible.

Además, la inyección SQL no se limita sólo a la base de datos, sino que puede llegar a afectar incluso archivos del sistema, como se indica en las respuestas a la pregunta: ¿La Inyección SQL actúa sólo a nivel de la base de datos o el riesgo es aún mayor?

Por lo tanto, la protección eficaz contra inyección SQL es usar consultas preparadas y otras técnicas ya explicadas en otras respuestas, como configuración adecuada de la conexión a la base de datos, listas blancas de tablas/columnas, etc.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
  • Como anexo, diría que si se puede obtener las contraseñas mediante un SELECT, hay problemas graves además de la inyección de SQL. – Luis Cazares Nov 01 '19 at 19:06