¿Es este un conjunto normal de privilegios de MySQL?

9

Usando phpmyadmin en una configuración de prueba de wamp local, y además de los estados del título, hay 3 usuarios marcados como user = ANY, password = NO, como:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Ninguno de los 3 usuarios tiene privilegios específicos para ninguna tabla, por lo que parece que no pueden hacer mucho. ¿Se trata de algún tipo de medida de seguridad genérica, para indicar explícitamente que 'Cualquier' usuario que no pertenece a ningún otro grupo de usuarios no tiene privilegios?

Chris
fuente
En realidad, esta es una muy buena pregunta porque mysql viene con permisos predeterminados que no se publican. +1 !!!
RolandoMySQLDBA

Respuestas:

6

En realidad, esas tres cuentas de usuario son bastante peligrosas. Representan una gran amenaza para probar las bases de datos.

Desafortunadamente, mysql viene con acceso completo a las bases de datos de prueba. ¿Cómo puedes encontrarlos?

Ejecute esta consulta:

 SELECT user,host,db from mysql.db;

Tras la instalación de mysql, verá dos filas que dan acceso completo a cualquier base de datos llamada 'prueba' o cuyos primeros 5 caracteres son 'prueba_'.

Por qué es esto un problema ???

Intenta ejecutar este comando:

$ mysql -u'' -Dtest

Habrás conectado la base de datos de prueba sin una contraseña.

Ahora, cree una tabla y cárguela con una fila:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, gran cosa. ¿Podrías duplicar esta mesa en tamaño 30 veces?

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Qué sacas ?? Una mesa con 1,073,741,824 filas. Fácilmente, 4GB +.

Imagina crear una tabla de cualquier tamaño. ¿Qué tal crear un montón de tablas en la base de datos de prueba y acceder libremente a ellas a voluntad?

Lo mejor que puede hacer en estas circunstancias es ejecutar esta consulta:

DELETE FROM mysql.db;

y reinicie mysql. Entonces, esas tres cuentas quedarán correctamente inoperantes.

Darle una oportunidad !!!

ACTUALIZACIÓN 2011-09-12 10:00 EDT

Esta eliminación:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

es justo lo que necesita para una instalación inicial. Sin embargo, si ya tiene usuarios establecidos, puede ejecutar esto en su lugar:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Esto eliminará los dos permisos de DB específicos.

Como mencioné en mi respuesta, los tres permisos son muy peligrosos para las bases de datos de prueba. Ejecutar este DELETE neutralizará esas cuentas por tener derechos completos para probar bases de datos.

RolandoMySQLDBA
fuente
Gracias por la explicación, pero ¿ELIMINAR DE mysql.db eliminará algo más de esos 3 usuarios? No quiero eliminar ningún dato / privilegio aparte de esos 3
Chris
@ Chris - Actualicé mi respuesta hace 3 horas para abordar su comentario.
RolandoMySQLDBA
-1

El peligro de mantener estas cuentas anónimas ya se ha explicado muy bien.

El manual proporciona una lista de verificación exhaustiva de los pasos a seguir para " Asegurar las cuentas MySQL iniciales ".

En particular, la sección "Asignación de contraseñas de cuentas anónimas" aconseja eliminar estas cuentas.

Además, el capítulo "Protección de bases de datos de prueba" aconseja:

Por defecto, la mysql.dbtabla contiene filas que permiten el acceso de cualquier usuario a la testbase de datos y otras bases de datos con nombres que comienzan con test_. (...) Esto significa que dichas bases de datos pueden ser utilizadas incluso por cuentas que de otro modo no poseen privilegios. Si desea eliminar el acceso de cualquier usuario a las bases de datos de prueba, hágalo de la siguiente manera:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Con el cambio anterior, solo los usuarios que tienen privilegios de bases de datos globales o privilegios otorgados explícitamente para la base de datos de prueba pueden usarla.

En particular, en sistemas que no son Windows, se recomienda ejecutar el mysql_secure_installationscript. El instalador de Windows creo que ofrece varios perfiles de instalación. Algunos de ellos deshabilitarán automáticamente la configuración insegura. De lo contrario, la lista de verificación deberá ejecutarse manualmente.

Se debe tener cuidado con los instaladores de terceros, como WAMP. Es posible que los permisos predeterminados indicados en el Manual oficial de MySQL no siempre se apliquen a estas instalaciones personalizadas (como "fuera del alcance del manual). Por supuesto, para un servidor de producción, las instalaciones WAMP y similares deben evitarse a toda costa .

Semilla aleatoria
fuente
¿Por qué el voto negativo en esta respuesta?
user12345