Privilegii necesare pentru utilizatorul bazei de date MySQL
Instrucțiunile scurte de instalare pentru WordPress ("5 Minute") menționează că:
Creează o bază de date pentru WordPress pe serverul tău web, precum și un utilizator MySQL care are toate privilegiile pentru accesarea și modificarea acesteia.
În timp ce configuram profesionist un blog nou, mă întrebam cum se mapează acest lucru la ceea ce îmi oferă configurația privilegiilor/permisiunilor utilizatorului bazei de date MySQL:
- Date:
SELECT
,INSERT
,UPDATE
,DELETE
- Definiție:
CREATE
,ALTER
,DROP
- Extra:
INDEX
- Altele:
LOCK TABLES
REFERENCES
CREATE TEMPORARY TABLES
CREATE VIEW
SHOW VIEW
CREATE ROUTINE
EXECUTE
ALTER ROUTINE
Sunt destul de sigur în privința primelor trei grupuri, pe care le-am numit aici Date, Definiție și Extra. Dar ce putem spune despre celelalte de sub intrarea Altele? În mod normal aș spune că acestea nu sunt necesare, dar aș dori să obțin o a doua părere.

"Toate privilegiile" înseamnă de obicei că ar trebui să acorzi tot utilizatorului. Totuși...
Am găsit cel puțin un articol care susține că utilizatorul MySQL are nevoie doar de:
- SELECT
- INSERT
- UPDATE
Cercetând mai adânc, am descoperit că pentru a funcționa pe deplin (actualizări automate, instalare/dezinstalare de plugin-uri etc.), WordPress necesită câteva permisiuni suplimentare:
- DELETE
- ALTER (pentru actualizări)
- CREATE TABLE
- DROP TABLE
De asemenea, neprezentate dar care au sens:
- INDEX
Dar acestea sunt singurele două surse solide pe care le-am găsit, susținute și de alte opinii publicate în altă parte. Totuși, vă încurajez să rămâneți la GRANT ALL, dar dacă trebuie neapărat să limitați utilizarea bazei de date, începeți cu aceste 7 privilegii și testați complet pentru a vă asigura că totul funcționează conform așteptărilor.

Mulțumesc pentru împărtășirea gândurilor tale. Pentru acel site instalat, nu am acordat GRANT ALL deoarece nu este un site de dezvoltare și am ales să includ doar permisiunile necesare, inclusiv INDEX. Până acum arată bine, cred că o să monitorizez în următoarele zile, este un site real cu multă utilizare de plugin-uri și altele asemenea. Pentru INDEX, aș putea să caut puțin în nucleul WordPress și în manualul MySQL.

Celelalte nu sunt necesare, așa cum subliniezi.
Apropo, ce ai putea face este să setezi condiționat utilizatorul/parola în funcție de pagina solicitată. Adică un utilizator neprivilegiat cu permisiuni de select/insert/update/delete pentru uz normal și unul privilegiat cu drepturi suplimentare legate de definiții/index atunci când se vizitează pagina de upgrade.

Există vreo referință despre cum să setezi condiționat utilizatorul/parola în funcție de pagina solicitată într-un mediu WordPress? TA

@superjos: Nu știu pe moment vreuna, dar ideea de bază ar fi să definești utilizatorul normal de DB pentru select/insert/update/delete în wp-config și, când URL-ul se potrivește cu paginile relevante din /wp-admin (probabil upgrade, activate theme și activate plugin), să definești un utilizator alternativ care poate face orice altceva.

Iată ce spune articolul Hardening WordPress despre restricționarea privilegiilor utilizatorilor bazei de date:
Pentru operațiunile normale WordPress, cum ar fi publicarea articolelor, încărcarea fișierelor media, postarea comentariilor, crearea de utilizatori noi și instalarea de plugin-uri, utilizatorul MySQL are nevoie doar de permisiuni de citire și scriere a datelor în baza de date; SELECT, INSERT, UPDATE și DELETE.
Prin urmare, orice alte privilegii de administrare și structură a bazei de date, cum ar fi DROP, ALTER și GRANT, pot fi revocate. Prin revocarea acestor permisiuni, îmbunătățiți și politicile de securitate.
Notă: Unele plugin-uri, teme și actualizări majore ale WordPress ar putea necesita modificări structurale în baza de date, cum ar fi adăugarea de tabele noi sau modificarea schemei. În astfel de cazuri, înainte de a instala plugin-ul sau de a actualiza software-ul, permiteți temporar utilizatorului bazei de date privilegiile necesare.

Referitor la „Nota” din postarea lui redburn, Codex-ul WordPress are și un Avertisment pe care ar trebui să-l citiți cu privire la actualizări și modificări ale schemei bazei de date...
(Edit: Observ totuși că NU MAI VĂD "GRANT" în lista de privilegii atunci când creez sau actualizez un utilizator. Poate că "CREATE" ar trebui adăugat în listă? Are cineva informații despre acest aspect? -- folosind Hostgator cPanel, Martie 2016 --)
AVERTISMENT:
Încercarea de a efectua actualizări fără a avea aceste privilegii [SELECT, INSERT, UPDATE, DELETE, DROP, ALTER și GRANT] poate cauza probleme atunci când apar modificări în schema bazei de date. Prin urmare, NU este recomandat să revocați aceste privilegii. Dacă simțiți nevoia să faceți acest lucru din motive de securitate, asigurați-vă că aveți un plan solid de backup, cu copii de rezervă regulate ale întregii baze de date pe care le-ați testat că sunt valide și care pot fi restaurate cu ușurință. O actualizare eșuată a bazei de date poate fi de obicei rezolvată prin restaurarea bazei de date la o versiune veche, acordarea permisiunilor corespunzătoare și apoi lăsând WordPress să încerce actualizarea din nou. Restaurarea bazei de date o va readuce la acea versiune veche, iar ecranele de administrare WordPress vor detecta versiunea veche și vă vor permite să executați comenzile SQL necesare. Majoritatea actualizărilor WordPress nu modifică schema, dar unele o fac. Doar actualizările majore (de exemplu, de la 3.7 la 3.8) vor modifica schema. Actualizările minore (de la 3.8 la 3.8.1) de obicei nu o vor face. Cu toate acestea, mențineți întotdeauna un backup regulat.

Opinia mea este aceeași ca a lui @EAMann mai sus, precum și sursele pe care le-a menționat: GRANT ALL este necesar pentru a vă asigura că site-ul dvs. este funcțional și pregătit pentru viitor. Chiar și pe un site de producție, ar trebui să încercați să respectați manualul utilizatorului.
Ca persoană care contribuie cu cod la nucleul WordPress și la câteva plugin-uri, vă recomand să păstrați drepturile implicite ale bazei de date, așa cum sunt sugerate în manualul utilizatorului (GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
).
Codul sursă al WordPress (atât prezent, cât și viitor) presupune că utilizatorul bazei de date WordPress are toate drepturile pentru baza de datelor WordPress specificată. Dacă configurația dvs. lipsește anumite drepturi ale bazei de date, s-ar putea să întâmpinați probleme pe măsură ce actualizați WordPress și adăugați mai multe plugin-uri.
Prin urmare, nu ar trebui să utilizați drepturi diferite de cele implicite recomandate de manual, decât dacă știți exact ce faceți, aveți nevoi foarte specifice și nu veți uita că aveți drepturi personalizate.
Pagina Codex a fost actualizată cu exemple despre cum să faceți acest lucru pe diverse sisteme și cu capturi de ecran. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User
Crearea unui nume de bază de date și a unui utilizator (prin PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin
Crearea unui nume de bază de date și a unui utilizator (prin clientul MySQL în linie de comandă): 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
