Al importar una exportación de base de datos desde otro servidor, aparece el error "ERROR 1227 (42000) en línea 15126: Acceso denegado; necesitas (al menos uno de) el privilegio SUPER(s) para esta operación "- miraste en el basurero en este punto, fue encontrado allí
/*!50001 CREAR ALGORITMO = INDEFINIDO */ /*!50013 DEFINER = `MEINDBUSER` @`% `SQL SECURITY INVOKER */
El problema aquí fue la parte "DEFINER =` MEINDBUSER` @ `%` " (MEINDBUSER, por supuesto, solo debe verse como un ejemplo). El usuario de la base de datos utilizado para la importación y en este caso también localhost tuvo que almacenarse aquí. Se veía así
/*!50001 CREAR ALGORITMO = INDEFINIDO */ /*!50013 DEFINER = MEINDBUSERNEU @ localhost INVOCADOR DE SEGURIDAD SQL */
También era importante eliminar las comillas individuales, que solo MEINDBUSERNEU @ localhost quedó allí. Entonces la importación funcionó sin ningún problema.
Actualización de 11.05.2020
Ahora este problema surgió nuevamente, pero esta vez no es tan fácil. La parte desencadenante del error al importar la base de datos fue esta vez:
/*!50003 CREAR*/ /*!50017 DEFINER = `[MEINDBUSER]`@` localhost` * / /*!50003 TRIGGER trg_catalog_category_entity_after_insert DESPUÉS DE INSERTAR EN catalog_category_entity PARA CADA FILA
El Definidor ahora era muy común, y no solo una vez como en la parte anterior- llamado.
Entonces había dos opciones:
- Prevenir, que al retroceder / Volcar la base de datos de estos usuarios de la base de datos se escribe en el archivo de copia de seguridad O
- Posteriormente elimine al usuario del archivo y luego impórtelo.
Hay opciones para ambos. Yo mismo creé el archivo de respaldo usando el comando SSH, Puedo ajustar un poco el comando y lograrlo, que ningún usuario concreto pero “Usuario actual” se utiliza. El comando sería este:
mysqldump -u "[Usuario]" --opt - transacción única - contraseña ="[CONSIGNA]" -h "[Host z.B. localhost]" "[Nombre de la base de datos]" | sed -E 's / DEFINER = `[^ `]+`@`[^ `]+`/ DEFINER = CURRENT_USER / g ' | gzip -9 > DATEINAME.sql.gz;
Esto crea una copia de seguridad de la base de datos con el nombre DATEINAME.sql.gz (así que está lleno de inmediato). Durante la creación del archivo, el comando SED convierte los datos del usuario definidos en la base de datos contra los generales. “USUARIO ACTUAL”-Información intercambiada. Entonces el archivo puede importarse más tarde. (Para descomprimir el archivo en el servidor de destino nuevamente “gunzip DATEINAME.sql.zip” DAR. Probablemente no tenga que mencionar eso, que el nombre se puede asignar libremente. Del mismo modo, los soportes de espacio dentro de los corchetes INCL. los corchetes se reemplazan por sus propios datos.)
Pero tengo que revisar el archivo SQL terminado, para importarlos, Puedo hacer esto a través de SSH con el siguiente comando y obtener el mismo resultado que el anterior
sed -E 's / DEFINER = `[^ `]+`@`[^ `]+`/ DEFINER = CURRENT_USER / g 'DATEINAME.sql > Nombre de archivo new.sql
Por razones de seguridad, el archivo no se sobrescribe simplemente, se crea un nuevo archivo, que tiene el nombre FILENAMEnew.sql.
Actualización de 04.05.2021
Hoy volvimos a tener este problema al configurar una tienda de prueba. El error ocurrió al importar la base de datos de liveshop a la nueva base de datos
ERROR 1227 (42000) at line 717: Access denied; you need (at least one of) the SU PER privilege(s) for this operation
Luego desenterramos este artículo nuevamente y ahora tenemos una posibilidad, expandir esto un poco con una nueva forma de resolver este problema. El siguiente comando elimina todas las referencias al usuario y, por lo tanto, es posible una importación sin ningún problema.:
sed -i.bak -e "s/\/\*[^*]*DEFINER=[^*]*\*\///" meindumpfile.sql