sql >> Base de Datos >  >> RDS >> Mysql

Proporcionar a los usuarios de MySQL solo los privilegios mínimos

No estoy de acuerdo con Bill aquí y la línea de pensamiento de Atomix es más adecuada. A menos que se pueda demostrar lo contrario, la respuesta de Bill aumenta considerablemente el riesgo de que la base de datos se vea comprometida.

Tal vez para los desarrolladores muy experimentados exista otra seguridad, pero para otros desarrolladores dar a un script acceso completo y sin restricciones para hacer ~cualquier cosa~ a una base de datos es buscar problemas, cuando no hay necesidad de hacerlo.

El principio de privilegio mínimo debería estar en uso aquí. Para MySQL, tenga un superusuario con todos los privilegios que se utilice para crear tablas, eliminar bases de datos, etc. Idealmente, este nombre de usuario y contraseña nunca se ven en ningún archivo PHP ni en ningún archivo del servidor web. (Estoy usando PHP como ejemplo, pero se aplica a otras aplicaciones web). Solo usaría este nombre de usuario y contraseña con algo como PHPMyAdmin o MySQL Workbench.

Luego, para los scripts PHP, tenga uno con el mínimo requerido, como INSERTAR, SELECCIONAR, ACTUALIZAR, tal vez ni siquiera ELIMINAR, dependiendo de su script PHP. Esto estaría en los archivos PHP, es decir, en realidad solo UN archivo FUERA de la raíz del documento, como lo recomienda la mayoría.

La razón es la siguiente:sí, no necesita un usuario de MySQL para cada usuario de la aplicación web. Pero el principio de privilegio mínimo ( http://en.wikipedia.org/wiki/Principle_of_least_privilege ) debería aplicar. Si de alguna manera su superusuario de MySQL se ve comprometido porque accidentalmente nombró su script de conexión de MySQL como .txt en lugar de .php, o alguien obtuvo acceso a los archivos del servidor web, al menos lo "peor" que pueden hacer es SELECCIONAR, ACTUALIZAR e INSERTAR. .. Que si bien puede causar grandes problemas de todos modos, no es tan malo como darles DROP DATABASE, DROP TABLES y cosas mucho peores.

Además, en mi proyecto actual debido a las prácticas de desarrollo ágil (no trabajo pero recomiendo http://www.agilealliance .org/ ), uno o dos miembros del equipo "no técnicos" están usando directamente PHPMyAdmin para realizar cambios directos en la base de datos MySQL. Esto se debe a que no es necesario crear un CMS para la entrada de datos directa simple. En este caso, un tercer usuario de MySQL con privilegios razonables pero, de nuevo, "suficientes" es adecuado para ellos. No queremos paralizar al miembro del equipo con muy pocos privilegios, pero, por supuesto, no debería poder eliminar o cambiar cosas accidentalmente.

Dado que MySQL no tiene ROLES (en el momento en que se hizo la pregunta original y según Bill), permitir que cualquier secuencia de comandos web solo acceda a MySQL con un solo superusuario es muy arriesgado.