No se puede descartar un usuario anónimo de mysql.user

15

Estoy tratando de BAJAR a los usuarios anónimos de mi base de datos mysql.users. Sin embargo, he estado teniendo un comportamiento extraño. Cuando ingreso el comando:

DROP User ''@'WOPR';

Estaba recibiendo un mensaje de error genérico. Entonces, reinicié mi máquina e intenté de nuevo. Esta vez recibí la respuesta

Query OK, 0 rows affected.

Pero cuando puse

SELECT User, Host, Password FROM mysql.user WHERE User='';

El regreso es:

+------+------+----------+
| User | Host | Password |
+------+------+----------+
|      | WOPR |          |
+------+------+----------+

(WOPR es mi nombre de host)

Ejecuto el comando

DROP User ''@'WOPR';

y obtener el mismo resultado.

Estoy ejecutando una nueva instalación de MySQL 5.5 en Arch Linux, versión del kernel 2.6.33.

¿Alguien sabe qué puede causar este comportamiento?

SirTasty
fuente
¡Haga correr la voz para enviar preguntas de esta naturaleza al DBA StackExchange!
RolandoMySQLDBA

Respuestas:

15
DELETE FROM mysql.user WHERE user='' AND host='WOPR';
FLUSH PRIVILEGES;

Esto debería hacerlo por ti.

Darle una oportunidad !!!

CONSIDERACIÓN

MySQL tiene ciertos usuarios preinstalados en mysql.user. Además, mysql.db viene con dos usuarios que tienen acceso anónimo y privilegios completos para probar bases de datos.

Solo haz esto

SELECT * FROM mysql.db \G

y verá que cualquiera que se conecte a la prueba o cualquier base de datos que comience con test_ puede hacer casi todo en la base de datos de prueba. Esto es malo ya que una persona con acceso completo a cualquier base de datos de prueba puede consumir un disco en cuestión de minutos.

Ejemplo:

use test
CREATE TABLE junk (INT a) ENGINE=MyISAM;
INSERT INTO junk VALUES (1);

OK, gran cosa. Hace una tabla con 4 bytes.

Ahora intenta ejecutar esta instrucción SQL 30 veces:

INSERT INTO junk SELECT * FROM junk;

¡Hola, una tabla instantánea con 1,073,741,824 filas (4GB + archivo)! Imágenes que tienen todos los derechos sobre una base de datos de prueba donde puede causar este tipo de estragos en un disco.

Mi consejo para usted es ejecutar esto para limpiar el acceso del usuario de prueba:

DELETE FROM mysql.db WHERE db LIKE 'tes%' AND user='';
FLUSH PRIVILEGES;

Para más aclaraciones, vea mi publicación MySQL: ¿Por qué hay entradas de "prueba" en mysql.db?

Salud !!!

RolandoMySQLDBA
fuente
Hola Rolando, eso funcionó, ¡gracias! En realidad estoy arreglando el acceso a mi base de datos de prueba ahora mismo.
SirTasty
¿No hay una manera de usar la drop usersintaxis en lugar de modificar la mysql.usertabla subyacente directamente?
Pacerier
1
@Pacerier Por favor, mire la pregunta original. El verdadero problema es que la DROP USERsintaxis no funciona cuando el campo de usuario está en blanco (cadena vacía). Debe hacerlo de la manera que especifica la respuesta.
RolandoMySQLDBA
@RolandoMySQLDBA, ¿hay otras soluciones además de hackear la mysql.usermesa?
Pacerier
@Pacerier Si lee mi último enlace, se dará cuenta de que MySQL (ahora Oracle) coloca dos filas directamente en mysql.dbla instalación que permitirá a los usuarios anónimos acceder a una base de datos de prueba. Curiosamente, me dijeron que la instalación del servidor Percona elimina esas filas antes de que se complete su instalación ( dba.stackexchange.com/questions/66584/… ). Como está utilizando MySQL, ejecute mysql_secure_installation o elimine esas dos filas usted mismo.
RolandoMySQLDBA