Tengo un servidor con una gran cantidad de bases de datos mysql. Recientemente, algunos de los esquemas dejaron de mostrarse al iniciar sesión como raíz.
Si uso el inicio de sesión para esa base de datos específica, entonces puedo verla.
El 'propietario' de esta base de datos es root, pero otras que tampoco son visibles para root son propiedad de otros.
Parece que las bases de datos a las que hemos accedido y en las que hemos trabajado recientemente desaparecen, pero ahora hay más de 5 que no son visibles. No es un caché local y cualquiera que también use el inicio de sesión raíz tiene el mismo problema.
Respuesta1
Si tuUSUARIO ACTUAL()no dice root@localhost
, entonces no tienes privilegios de root y no puedes conectarte como tal.
Para ver qué privilegios reales tiene después de conectarse, ejecute esto
SHOW GRANTS;
Cuando se conecta a una base de datos específica, debería poder ver
- las tablas de esa base de datos
- metadatos en INFORMACIÓN_SCHEMA solo para esa base de datos
Digamos, por ejemplo, que te conectaste a buyspace_systdb
La salida deSHOW GRANTS;
lo más probable es que aparezca algo como esto
GRANT USAGE ON *.* ...
GRANT ALL PRIVILEGES ON buyspace_systdb.* TO ...
El usuario root@localhost
funcionará si inicia sesión desde ese servidor local. Si está iniciando sesión de forma remota, root@localhost
no permitiráUSUARIO()para autenticarse comoUSUARIO ACTUAL(). La prueba de esto está en la primera pantalla de su pregunta. Tenga en cuenta que solo puede ver información_esquema. Prácticamente se vaciará con la excepción de information_schema.schemata que tendría 1 o 2 entradas. Si root@'%'
existiera mysql.user
y tuviera los mismos privilegios que root@localhost
, entonces se le permitiría ver todo como root@localhost
.
MySQL tiene un esquema de autenticación que tiene un efecto de espiral descendente. Si el usuario con el que intenta conectarse no existe, intentará usar nombres de usuario que sean más vagos (permitiendo comodines o privilegios limitados). Ver mi publicación de DBA StackExchangeError de MySQL: acceso denegado para el usuario 'a'@'localhost' (usando contraseña: SÍ) para más detalles sobre esto.
Línea de fondo: No puede conectarse root@localhost
desde una ubicación remota