Usuario de la base de datos MySQL: ¿Qué privilegios se necesitan?

52

Las instrucciones breves de instalación para WordPress ( "5 minutos" ) indican que:

Cree una base de datos para WordPress en su servidor web, así como un usuario de MySQL que tenga todos los privilegios para acceder y modificarlo.

Al configurar un nuevo blog profesionalmente, me preguntaba cómo eso se asigna a lo que me ofrece la configuración de permisos / privilegios de usuario de la base de datos MySQL:

  • Datos: SELECT , INSERT, UPDATE,DELETE
  • Definición: CREATE , ALTER,DROP
  • Extra: INDEX
  • Más:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

Estoy bastante seguro de los primeros tres grupos, los denominé Datos, Definición y Extra aquí. Pero, ¿qué pasa con los otros debajo de la entrada Más ? Normalmente diría que no son necesarios, pero me gustaría obtener una segunda opinión.

hakre
fuente

Respuestas:

13

Los demás no son necesarios como usted señala.

Por cierto, lo que podría hacer es configurar condicionalmente el usuario / pase en función de la página solicitada. Como en no privilegiado con seleccionar / insertar / actualizar / eliminar para uso normal, y privilegiado con cosas relacionadas con la definición / índice además cuando visita la página de actualización.

Denis de Bernardy
fuente
1
¿Hay alguna referencia sobre cómo configurar condicionalmente el usuario / pase en función de la página solicitada en un entorno de WordPress? TA
superjos
@superjos: No es que sepa de la parte superior de mi cabeza, pero lo esencial sería definir al usuario de base de datos normal seleccionar / insertar / actualizar / eliminar en wp-config y, cuando la url coincide con la correspondiente / páginas wp-admin (probablemente actualizar, activar el tema y activar el complemento), para definir un usuario alternativo que pueda hacer todo lo demás.
Denis de Bernardy
34

"Todos los privilegios" por lo general significa que debe otorgarle todo al usuario. Sin embargo ...

He encontrado al menos un artículo que afirma que el usuario de MySQL solo necesita:

  • SELECCIONAR
  • INSERTAR
  • ACTUALIZAR

Profundizando , descubrí que para funcionar completamente (actualizaciones automáticas, instalación / desinstalación de complementos, etc.), WordPress requiere algunos permisos adicionales:

  • ELIMINAR
  • ALTERAR (para actualizaciones)
  • CREAR MESA
  • MESA PLEGABLE

Además, no se hace referencia, pero tiene sentido:

  • ÍNDICE

Pero esas son las únicas dos referencias sólidas que puedo encontrar que están respaldadas por opiniones publicadas en otros lugares. Todavía te animo a que te quedes con GRANT ALL, pero si debes limitar tu uso de DB, comienza con estos 7 privilegios y prueba completamente para asegurarte de que las cosas funcionen como se espera.

EAMann
fuente
Gracias por compartir tus pensamientos. Para ese sitio instalado, NO OTORGÉ TODO ya que este no es un sitio de desarrollo y en su lugar me quedo con todos los incl. ÍNDICE. Se ve bien hasta ahora, creo que lo mantendré rastreado en los próximos días, es un sitio de la vida real incl. mucho uso de complementos y similares. Para INDEX, también podría buscar un poco el núcleo y el manual de mysql.
Hakre
1
Solo recuerde que los complementos de terceros pueden llamar a casi cualquier instrucción SQL que deseen ... así que asegúrese de examinarlos adecuadamente antes de instalar elementos que dependen de los privilegios que ha revocado.
EAMann
12

Esto es lo que el Codex tiene que decir al restringir los privilegios de usuario de la base de datos:

Para las operaciones normales de WordPress, como publicar publicaciones de blog, cargar archivos multimedia, publicar comentarios, crear nuevos usuarios de WordPress e instalar complementos de WordPress, el usuario de la base de datos MySQL solo necesita privilegios de lectura y escritura de datos en la base de datos MySQL; SELECCIONAR, INSERTAR, ACTUALIZAR y ELIMINAR.

Por lo tanto, se puede revocar cualquier otra estructura de base de datos y privilegios de administración, como DROP, ALTER y GRANT. Al revocar tales privilegios, también está mejorando las políticas de contención.

Nota: Algunos complementos, temas y actualizaciones importantes de WordPress pueden requerir cambios estructurales en la base de datos, como agregar nuevas tablas o cambiar el esquema. En tal caso, antes de instalar el complemento o actualizar un software, permita temporalmente al usuario de la base de datos los privilegios necesarios.

http://codex.wordpress.org/Hardening_WordPress

Redburn
fuente
2
Intento practicar el principio de Privilegio Mínimo siempre que sea posible. La información citada (útil) ya no se encuentra en el artículo vinculado del Codex, así que gracias por copiarla aquí.
Anthony G - justicia para Monica
2

Con respecto a la "Nota" en la publicación de redburn, el Codex de Wordpress también tiene una Advertencia que también debe leer sobre actualizaciones y cambios en el esquema de la base de datos ...

(Editar: Sin embargo, me doy cuenta de que ya NO VO "OTORGAR" en la lista de privilegios al crear o actualizar un usuario. ¿Quizás debería agregarse "CREAR" a la lista? ¿Alguien tiene información al respecto? - usando Hostgator cPanel , Marzo de 2016 -)

ADVERTENCIA:
Intentar actualizaciones sin tener estos privilegios [ SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR, BAJAR, ALTERAR y OTORGAR] puede causar problemas cuando se producen cambios en el esquema de la base de datos. Por lo tanto, NO se recomienda revocar estos privilegios. Si siente la necesidad de hacer esto por razones de seguridad, asegúrese de tener un plan de respaldo sólido en primer lugar, con respaldos regulares de bases de datos completas que haya probado que sean válidos y que puedan restaurarse fácilmente. Una actualización fallida de la base de datos generalmente se puede resolver restaurando la base de datos a una versión anterior, otorgando los permisos adecuados y luego dejando que WordPress intente actualizar la base de datos nuevamente. La restauración de la base de datos la devolverá a esa versión anterior y las pantallas de administración de WordPress detectarán la versión anterior y le permitirán ejecutar los comandos SQL necesarios en ella. La mayoría de las actualizaciones de WordPress no cambian el esquema, pero algunas sí. Solo actualizaciones de puntos importantes (3.7 a 3.8, por ejemplo) alterará el esquema. Las actualizaciones menores (3.8 a 3.8.1) generalmente no lo harán. Sin embargo, mantenga una copia de seguridad regular.

Códice: http://codex.wordpress.org/Hardening_WordPress

Jerry9
fuente
0

Mi opinión es la misma que @EAMann arriba, así como las fuentes a las que hizo referencia: GRANT ALL es necesario para garantizar que su sitio sea funcional y esté preparado para el futuro. Incluso en un sitio de producción, intente atenerse al manual del usuario.

Como alguien que aporta código al núcleo de WordPress y algunos complementos, le recomiendo que conserve los privilegios de base de datos predeterminados como se sugiere en el manual del usuario (OTORGUE TODOS LOS PRIVILEGIOS EN wpdatabasename. * A "wordpressusername" @ "hostname").

El código fuente de WordPress (tanto presente como futuro) asume que el usuario de WordPress DB tiene todos los privilegios de DB para la base de datos de WordPress dada. Si su configuración pierde algún privilegio de base de datos, puede tener problemas al actualizar WordPress y agregar más complementos.

Por lo tanto, no debería usar privilegios de DB diferentes de los privilegios de DB predeterminados recomendados por el manual, a menos que sepa lo que está haciendo, tenga necesidades muy específicas y no olvide que tiene privilegios de DB personalizados.

Desde entonces, la página del Codex se ha actualizado sobre cómo hacer esto con ejemplos en varios sistemas y capturas de pantalla. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Crear un nombre y usuario de Databse (a través de PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Creación de un nombre y usuario de Databse (a través del cliente de línea de comandos MySQL): https://codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client

mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
    -> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
Steven Lin
fuente