Utente del database MySQL: quali privilegi sono necessari?


52

Le brevi istruzioni di installazione per WordPress ( "5 minuti" ) affermano che:

Crea un database per WordPress sul tuo server web, così come un utente MySQL che ha tutti i privilegi per accedervi e modificarlo.

Durante la creazione professionale di un nuovo blog, mi chiedevo come si associ a ciò che la configurazione dei privilegi / autorizzazioni dell'utente del database MySQL mi offre:

  • Dati: SELECT , INSERT, UPDATE,DELETE
  • Definizione: CREATE , ALTER,DROP
  • Extra: INDEX
  • Di Più:
    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, li ho chiamati Dati, Definizione ed Extra qui. Ma per quanto riguarda gli altri sotto la voce Altro ? Normalmente direi che non sono necessari, ma vorrei avere una seconda opinione.

Risposte:


13

Gli altri non sono necessari come fai notare.

A proposito, quello che potresti fare è impostare condizionalmente l'utente / pass in base alla pagina richiesta. Come non privilegiato con seleziona / inserisci / aggiorna / elimina per uso normale e privilegiato con elementi relativi a definizione / indice in aggiunta quando visiti la pagina di aggiornamento.


1
C'è qualche riferimento su come impostare in modo condizionale l'utente / pass in base alla pagina richiesta in un ambiente WordPress? TA
superjos

@superjos: Non che io sia a conoscenza della parte superiore della mia testa, ma l'essenziale sarebbe definire l'utente normale DB selezionare / inserire / aggiornare / eliminare in wp-config e, quando l'URL corrisponde al pertinente / pagine wp-admin (probabilmente aggiornando, attivando il tema e attivando il plugin), per definire un utente alternativo che può fare tutto il resto.
Denis de Bernardy,

34

"Tutti i privilegi" di solito significa che dovresti fare tutto per l'utente. Però ...

Ho trovato almeno un articolo che afferma che l'utente di MySQL ha solo bisogno di:

  • SELEZIONARE
  • INSERIRE
  • AGGIORNARE

Scavando più a fondo , ho scoperto che per funzionare completamente (aggiornamenti automatici, installazione / disinstallazione plug-in, ecc.), WordPress richiede alcune autorizzazioni aggiuntive:

  • ELIMINA
  • ALTER (per aggiornamenti)
  • CREA TABELLA
  • TABELLA DI GOCCIA

Inoltre, non referenziato ma ha senso:

  • INDICE

Ma questi sono gli unici due riferimenti solidi che posso trovare supportati da opinioni pubblicate altrove. Ti incoraggio comunque a rispettare GRANT ALL, ma se devi assolutamente limitare l'utilizzo del tuo DB, inizia con questi 7 privilegi e testa completamente per assicurarti che tutto funzioni come previsto.


Grazie per aver condiviso i vostri pensieri. Per quel sito installato non ho concesso TUTTO in quanto questo non è un sito di sviluppo e invece attenersi a tutti incl. INDICE. Sembra buono finora, penso di tenerlo tracciato nei prossimi giorni, è un sito di vita reale incl. un sacco di utilizzo del plugin e simili. Per INDEX potrei cercare un po 'anche il core e il manuale mysql.
Hakre,

1
Ricorda solo che i plug-in di terze parti possono chiamare qualsiasi istruzione SQL che desiderano ... quindi assicurati di controllarli correttamente prima di installare cose che dipendono dai privilegi che hai revocato.
EAMann,

12

Ecco cosa ha da dire il Codex sulla limitazione dei privilegi dell'utente del database:

Per le normali operazioni di WordPress, come la pubblicazione di post di blog, il caricamento di file multimediali, la pubblicazione di commenti, la creazione di nuovi utenti di WordPress e l'installazione di plug-in di WordPress, l'utente del database MySQL necessita solo dei privilegi di lettura e scrittura dei dati nel database MySQL; SELEZIONA, INSERISCI, AGGIORNA e ELIMINA.

Pertanto, è possibile revocare qualsiasi altra struttura di database e privilegi di amministrazione, come DROP, ALTER e GRANT. Revocando tali privilegi si sta anche migliorando le politiche di contenimento.

Nota: alcuni plugin, temi e importanti aggiornamenti di WordPress potrebbero richiedere modifiche strutturali al database, come aggiungere nuove tabelle o modificare lo schema. In tal caso, prima di installare il plug-in o aggiornare un software, consentire temporaneamente all'utente del database i privilegi richiesti.

http://codex.wordpress.org/Hardening_WordPress


2
Cerco di praticare il principio del privilegio minimo, quando possibile. Le informazioni (utili) citate non si trovano più nell'articolo Codex collegato, quindi grazie per averle copiate qui.
Anthony G - giustizia per Monica

2

Per quanto riguarda la "Nota" nel post di redburn, il WordPress Codex ha anche un avvertimento che dovresti anche leggere sugli aggiornamenti e le modifiche dello schema del database ...

(Modifica: noto tuttavia che NON VEDO più "GRANT" nell'elenco dei privilegi durante la creazione o l'aggiornamento di un utente. Forse "CREATE" dovrebbe essere aggiunto all'elenco? Qualcuno ha informazioni al riguardo? - utilizzando Hostgator cPanel , Marzo 2016 -)

ATTENZIONE:
tentare aggiornamenti senza questi privilegi [ SELECT, INSERT, UPDATE, DELETE, DROP, ALTER e GRANT] può causare problemi quando si verificano modifiche allo schema del database. Pertanto, NON è consigliabile revocare questi privilegi. Se ritieni che sia necessario eseguire questa operazione per motivi di sicurezza, assicurati di disporre innanzitutto di un solido piano di backup, con backup regolari dell'intero database che hai testato siano validi e che possano essere facilmente ripristinati. Un aggiornamento del database non riuscito di solito può essere risolto ripristinando il database a una versione precedente, concedendo le autorizzazioni appropriate e quindi lasciando che WordPress tenti nuovamente l'aggiornamento del database. Il ripristino del database lo riporterà a quella versione precedente e le schermate di amministrazione di WordPress rileveranno la versione precedente e consentiranno di eseguire i comandi SQL necessari su di esso. La maggior parte degli aggiornamenti di WordPress non modifica lo schema, ma alcuni lo fanno. Solo importanti aggiornamenti di punti (da 3,7 a 3,8, per esempio) modificherà lo schema. Gli aggiornamenti minori (da 3.8 a 3.8.1) generalmente no. Tuttavia, mantenere un backup regolare.

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


0

La mia opinione è la stessa di @EAMann sopra, così come le fonti a cui ha fatto riferimento: GRANT ALL è necessario per garantire che il tuo sito sia funzionale e a prova di futuro. Anche in un sito di produzione, dovresti provare a seguire il manuale dell'utente.

Come persona che contribuisce con il codice al core di WordPress e alcuni plug-in, ti consiglio di conservare i privilegi DB predefiniti come suggerito nel manuale dell'utente (CONCESSIONE DI TUTTI I PRIVILEGI SU wpdatabasename. * A "wordpressusername" @ "hostname").

Il codice sorgente di WordPress (sia presente che futuro) presuppone che l'utente di WordPress DB disponga di tutti i privilegi di DB per il database di WordPress specificato. Se la tua installazione non ha alcun privilegio DB, potresti riscontrare problemi durante l'aggiornamento di WordPress e l'aggiunta di altri plug-in.

Quindi non dovresti davvero usare privilegi DB diversi dai privilegi DB predefiniti consigliati dal manuale, a meno che tu non sappia cosa stai facendo, abbia esigenze molto specifiche e non dimenticherai di avere privilegi DB personalizzati.

Da allora la pagina del Codex è stata aggiornata su come farlo con esempi su vari sistemi e schermate. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Creazione di un nome database e utente (tramite PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Creazione di un nome database e utente (tramite client della riga di comando 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.