Debido a algunos problemas, decidí volver a crear todos los usuarios excepto root@localhost
. Esto funciona bien, pero el usuario recién creado no tiene derecho a hacer nada. Lo que quiero es simplemente dar todos los derechos de root en alguna IP local. Yo (as root@localhost
) intenté
CREATE USER 'root'@'10.0.3.210';
GRANT ALL ON *.* TO 'root'@'10.0.3.210';
El primer comando funciona, el segundo falla con el mensaje
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
No entiendo por qué root@localhost
no puedo hacer todo, estoy seguro de que no me metí con sus privilegios. Desde
SHOW GRANTS FOR 'root'@'localhost'
yo obtengo
Grants for root@localhost
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'localhost' WITH GRANT OPTION
lo que sea que esto signifique. ¿Me estoy perdiendo un privilegio necesario? ¿Se puede arreglar?
Estoy trabajando con mysql Ver 14.14 Distrib 5.1.61, para debian-linux-gnu (x86_64).
mysql
permissions
maaartinus
fuente
fuente
GRANT SELECT ON *.* TO 'root'@'10.0.3.210';
?Respuestas:
Oh, Dios mío, creo que el problema surge de mezclar el esquema mysql de diferentes versiones de mysql. En primer lugar, ejecute esta consulta:
Para MySQL 5.6, obtienes 43 columnas
Para MySQL 5.5, obtienes 42 columnas
Para MySQL 5.1, obtienes 39 columnas
Para MySQL 5.0, obtienes 37 columnas
Para MySQL 4.x, obtienes 31 columnas
Imagine este escenario:
Los permisos de usuario comienzan a desplazarse. Cada vez que ejecuta
SHOW GRANTS;
, está programado esperar columnas en lugares específicos en mysql.user (dado que mysql.user es un MyISAM y su ROW_FORMAT es dinámico (predeterminado)). Es muy fácil ver que un usuario pierde de repente los permisos cuando vuelve a cargar una versión MySQL 5.0 de mysql.user en una instancia de MySQL 5.1.En el futuro, si alguna vez decide recargar a los usuarios en MySQL, intente volcarlos en un archivo de texto usando pt-show- grant en lugar de mysqldump.
De hecho, escribí mi propia versión de pt-show-grant de la siguiente manera:
Esto producirá todas las concesiones de usuario como SQL, que es mucho más portátil que las técnicas estándar de mysql. Simplemente vuelva a cargar el script SQL y se ejecutarán las SUBVENCIONES. Por supuesto, dicha recarga solo es compatible con versiones anteriores, nunca con versiones anteriores.
fuente
El comentario de
gbn
me llevó a la solución: no tengo idea de cómo surgió, pero meroot@localhost
faltaron algunos privilegios. Así que primero obténgalos todos a través deHay bastantes columnas, por lo que usar algo como
puede ahorrar bastante tipeo. Probablemente
FLUSH PRIVILEGES
sea necesario después de las ACTUALIZACIONES. Una vez que tengo todos los privilegios, también puedo OTORGARLOS.fuente
He visto un problema en el que no puedes
GRANT CREATE TABLESPACE
.Sin embargo, no estoy seguro de todos los detalles y lo vi en 5.5 / Solaris
Mi comentario anterior y su respuesta indican que esto puede aplicarse aquí. Es decir, puede OTORGAR todo excepto
CREATE TABLESPACE
permisosfuente
Como @RolandoMYSQLDBA afirmó correctamente, este problema se debe a la actualización de su versión de MySQL mientras se mantienen los archivos más antiguos (sin volcar / restaurar). @gbn también concluyó correctamente que esto está relacionado con el
CREATE TABLESPACE
privilegio que se agregó en MySQL 5.5. Probablemente tenga archivos de base de datos de MySQL 5.1.La solución simple (que también está documentada en el manual de referencia de MySQL ) es ejecutar
mysql_upgrade
mientras se saltea laGRANT
comprobación de tablas:fuente