Utente Database MySQL: Quali Privilegi sono necessari?
Le brevi istruzioni di installazione per WordPress ("5 Minuti") affermano che:
Crea un database per WordPress sul tuo web server, così come un utente MySQL che abbia tutti i privilegi per accedervi e modificarlo.
Durante la configurazione professionale di un nuovo blog, mi sono chiesto come questo si traduca nelle opzioni di configurazione dei privilegi/permessi dell'utente del database MySQL:
- Dati:
SELECT
,INSERT
,UPDATE
,DELETE
- Definizione:
CREATE
,ALTER
,DROP
- Extra:
INDEX
- Altro:
LOCK TABLES
REFERENCES
CREATE TEMPORARY TABLES
CREATE VIEW
SHOW VIEW
CREATE ROUTINE
EXECUTE
ALTER ROUTINE
Sono abbastanza sicuro per i primi tre gruppi, che ho chiamato Dati, Definizione ed Extra qui. Ma cosa dire degli altri sotto la voce Altro? Normalmente direi che questi non sono necessari, ma vorrei avere un secondo parere.

"Tutti i privilegi" di solito significa che dovresti concedere tutto all'utente. Tuttavia...
Ho trovato almeno un articolo che afferma che l'utente MySQL ha bisogno solo di:
- SELECT
- INSERT
- UPDATE
Approfondendo, ho scoperto che per funzionare completamente (aggiornamenti automatici, installazione/disinstallazione di plugin, ecc.), WordPress richiede alcune autorizzazioni aggiuntive:
- DELETE
- ALTER (per gli aggiornamenti)
- CREATE TABLE
- DROP TABLE
Inoltre, non menzionato ma ha senso:
- INDEX
Ma questi sono gli unici due riferimenti solidi che ho trovato e che sono supportati da opinioni pubblicate altrove. Ti incoraggio comunque a mantenere GRANT ALL, ma se devi assolutamente limitare l'uso del database, inizia con questi 7 privilegi e testa accuratamente per assicurarti che tutto funzioni come previsto.

Grazie per aver condiviso i tuoi pensieri. Per quel sito installato non ho concesso GRANT ALL poiché non è un sito di sviluppo e invece mi sono attenuto a tutto incluso INDEX. Sembra andare bene finora, penso che lo terrò monitorato nei prossimi giorni, è un sito reale con molto uso di plugin e simili. Per INDEX potrei cercare un po' nel core e nel manuale di mysql.

Gli altri non sono necessari come hai sottolineato.
Tra l'altro, quello che potresti fare è impostare in modo condizionale l'utente/password in base alla pagina richiesta. Ad esempio utilizzare un utente con privilegi limitati (select/insert/update/delete) per l'uso normale, e un utente con privilegi avanzati che include anche le operazioni di definizione/indice quando si visita la pagina di aggiornamento.

Esiste qualche riferimento su come impostare in modo condizionale l'utente/password in base alla pagina richiesta in un ambiente WordPress? TA

@superjos: Non che io sappia al momento, ma l'idea generale sarebbe definire l'utente normale del database per select/insert/update/delete in wp-config e, quando l'URL corrisponde alle pagine rilevanti di /wp-admin (probabilmente upgrade, attiva tema e attiva plugin), definire un utente alternativo che può fare tutto il resto.

Ecco cosa dice l'articolo su Hardening WordPress riguardo alla limitazione dei privilegi degli utenti del database:
Per le normali operazioni di WordPress, come pubblicare post, caricare file multimediali, postare commenti, creare nuovi utenti WordPress e installare plugin, l'utente del database MySQL ha bisogno solo dei privilegi di lettura e scrittura dei dati nel database MySQL; SELECT, INSERT, UPDATE e DELETE.
Pertanto, qualsiasi altro privilegio relativo alla struttura del database e all'amministrazione, come DROP, ALTER e GRANT, può essere revocato. Revocando tali privilegi si migliorano anche le politiche di contenimento.
Nota: Alcuni plugin, temi e aggiornamenti importanti di WordPress potrebbero richiedere modifiche strutturali al database, come aggiungere nuove tabelle o modificare lo schema. In tal caso, prima di installare il plugin o aggiornare il software, concedere temporaneamente all'utente del database i privilegi necessari.

Per quanto riguarda la "Nota" nel post di redburn, anche il Codex di WordPress ha un Avvertimento che dovresti leggere riguardo agli aggiornamenti e alle modifiche allo schema del database...
(Modifica: noto però che NON VEDO PIÙ "GRANT" nella lista dei privilegi quando creo o aggiorno un utente. Forse "CREATE" dovrebbe essere aggiunto alla lista? Qualcuno ha informazioni al riguardo? -- usando Hostgator cPanel, marzo 2016 --)
AVVERTENZA:
Tentare aggiornamenti senza avere questi privilegi [SELECT, INSERT, UPDATE, DELETE, DROP, ALTER e GRANT] può causare problemi quando avvengono modifiche allo schema del database. Pertanto, NON è raccomandato revocare questi privilegi. Se senti la necessità di farlo per motivi di sicurezza, assicurati di avere un solido piano di backup, con regolari backup completi del database che hai verificato essere validi e che possono essere facilmente ripristinati. Un aggiornamento del database fallito può solitamente essere risolto ripristinando il database a una versione precedente, concedendo i permessi corretti e poi lasciando che WordPress riprovi l'aggiornamento del database. Ripristinare il database lo riporterà alla versione precedente e le schermate di amministrazione di WordPress rileveranno la vecchia versione permettendoti di eseguire i comandi SQL necessari. La maggior parte degli aggiornamenti di WordPress non modifica lo schema, ma alcuni sì. Solo gli aggiornamenti principali (da 3.7 a 3.8, per esempio) modificano lo schema. Gli aggiornamenti minori (da 3.8 a 3.8.1) generalmente no. Tuttavia, mantieni sempre un backup regolare.

La mia opinione è la stessa di @EAMann sopra, così come le fonti da lui citate: GRANT ALL è necessario per garantire che il tuo sito sia funzionale e pronto per il futuro. Anche su un sito in produzione, dovresti cercare di attenerti al manuale utente.
Come qualcuno che contribuisce al codice di WordPress core e a qualche plugin, ti consiglio di mantenere i privilegi predefiniti del database come suggerito nel manuale utente (GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname").
Il codice sorgente di WordPress (sia presente che futuro) presuppone che l'utente del database WordPress abbia tutti i privilegi del database per il dato database WordPress. Se la tua configurazione manca di alcuni privilegi del database, potresti incontrare problemi durante l'aggiornamento di WordPress e l'aggiunta di nuovi plugin.
Quindi non dovresti davvero utilizzare privilegi del database diversi da quelli predefiniti raccomandati dal manuale, a meno che tu non sappia cosa stai facendo, abbia esigenze molto specifiche e non dimentichi di avere privilegi personalizzati.
La pagina del Codex è stata aggiornata con esempi su vari sistemi e screenshot su come fare questo. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User
Creazione di un nome di database e utente (tramite PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin
Creazione di un nome di database e utente (tramite client MySQL da riga di comando): 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
