Utente Database MySQL: Quali Privilegi sono necessari?

6 gen 2011, 14:53:46
Visualizzazioni: 82.3K
Voti: 62

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:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. 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.

0
Tutte le risposte alla domanda 5
2
46

"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.

6 gen 2011 17:17:25
Commenti

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.

hakre hakre
6 gen 2011 17:33:14

Ricorda solo che i plugin di terze parti possono chiamare praticamente qualsiasi istruzione SQL vogliano... quindi assicurati di valutarli adeguatamente prima di installare componenti che dipendono da privilegi che hai revocato.

EAMann EAMann
6 gen 2011 17:41:09
2
16

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.

6 gen 2011 18:09:44
Commenti

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

superjos superjos
24 gen 2014 20:44:20

@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.

Denis de Bernardy Denis de Bernardy
24 gen 2014 21:58:03
1
13

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.

https://wordpress.org/support/article/hardening-wordpress/

12 gen 2014 19:09:25
Commenti

Cerco di seguire il principio del Minor Privilegio ogni volta che è possibile. Le informazioni utili citate non sono più presenti nell'articolo del Codex collegato, quindi grazie per averle copiate qui.

Anthony Geoghegan Anthony Geoghegan
2 mar 2017 12:38:06
0

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.

Codex: http://codex.wordpress.org/Hardening_WordPress

30 mar 2016 09:59:25
0

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
8 ott 2018 18:42:16