La sicurezza dell'installazione di MySQL è qualcosa che dovrebbe essere nella mente di ogni DBA MySQL. Sebbene abbiamo discusso di come dovresti prenderti cura della tua sicurezza MySQL nel suo insieme (dai un'occhiata ad alcuni dei nostri post precedenti, in particolare la serie sulla sicurezza di MySQL Parte 1 e Parte 2), non abbiamo discusso problemi specifici relativi alla sicurezza, compresi quelli problemi relativi ai privilegi. Lo facciamo qui.
Cosa sono i privilegi in MySQL?
I privilegi in MySQL possono essere concessi agli account. Se concedi i privilegi dell'account in MySQL, determini le operazioni che l'account può eseguire. I privilegi possono essere concessi a database o oggetti di database (tabelle, indici, viste, ecc.) I privilegi possono anche essere dinamici o statici. I privilegi statici sono integrati nel server mentre i privilegi dinamici possono essere definiti in fase di esecuzione.
Come utilizzare i privilegi per la sicurezza MySQL
Per utilizzare i privilegi in MySQL, ecco cosa devi ricordare:
-
Per assegnare o revocare i privilegi, devi avere un utente MySQL. Gli utenti possono essere creati eseguendo una query CREATE USER:
CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;
-
Per assegnare o revocare i privilegi, utilizzare rispettivamente le istruzioni GRANT e REVOKE:
GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’; REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;
-
Puoi salvare i privilegi eseguendo FLUSH PRIVILEGES. Visualizzali eseguendo SHOW GRANTS.
-
L'istruzione GRANT non può essere utilizzata per concedere sia privilegi che ruoli; l'istruzione deve concedere privilegi o ruoli.
Per rendere più sicura la tua installazione di MySQL, considera quanto segue:
-
Concedi ai tuoi utenti solo i privilegi necessari per svolgere le loro attività (ad esempio, non utilizzare GRANT ALL se è non necessario)
-
In generale, evita di eseguire MySQL come utente root Unix perché qualsiasi utente con il privilegio FILE può causare il server per creare file come root.
-
Non concedere il privilegio FILE a utenti che non sono amministratori (fare riferimento alla spiegazione sopra)
-
Considera l'esecuzione di mysqld come un normale utente senza privilegi.
-
Non concedere privilegi PROCESS o SUPER agli utenti che non sono amministratori. Il privilegio PROCESS consente all'utente di visualizzare tutti i processi in esecuzione in MySQL. Il privilegio SUPER, tra le altre cose, abilita le modifiche alla configurazione del server, abilita l'uso delle istruzioni CREATE SERVER, ALTER SERVER e DROP SERVER, e abilita anche l'uso dell'istruzione KILL permettendo all'utente di uccidere le istruzioni appartenenti ad altri account. Tieni presente che MySQL riserva una connessione extra per gli utenti che hanno il privilegio SUPER. Il privilegio SUPER consente inoltre a un utente di controllare i server di replica.
Segui il consiglio sopra e dovresti essere sulla buona strada per un'installazione MySQL più sicura. Tuttavia, se stai utilizzando una versione più recente di MySQL, c'è un'altra cosa di cui devi essere a conoscenza:MySQL ha introdotto i ruoli in MySQL 8.0.16.
Ruoli nella sicurezza MySQL
Se non hai mai sentito parlare di ruoli in MySQL, non preoccuparti. I ruoli sono molto simili ai privilegi, motivo per cui li abbiamo inclusi in questo post del blog. In effetti, i ruoli sono proprio questo:sono raccolte di privilegi, ovvero quando un ruolo viene assegnato a un utente, a un utente vengono assegnati tutti i privilegi connessi a quel ruolo. I ruoli possono essere aggiunti e rimossi utilizzando le istruzioni CREATE ROLE e DROP ROLE. Per utilizzare i ruoli in MySQL, crea un nome di ruolo, concedi i privilegi a quel ruolo, quindi assegnalo a un utente in questo modo:
CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];
Quali privilegi dovresti concedere?
Quando concedi i privilegi, segui il principio del privilegio minimo:a un account MySQL dovrebbero essere concessi solo i privilegi richiesti per i suoi scopi. I privilegi più comunemente usati sono:
-
TUTTI I PRIVILEGI che concede tutti i privilegi a un account.
-
CREATE concede i privilegi necessari per creare database e tabelle.
-
DROP concede i privilegi necessari per eliminare database e tabelle.
-
DELETE concede i privilegi necessari per eliminare le righe dalle tabelle.
-
INSERT concede i privilegi necessari per inserire righe nelle tabelle.
-
SELECT concede i privilegi necessari per eseguire query SELECT.
-
UPDATE concede i privilegi necessari per aggiornare le righe di una tabella (per eseguire query UPDATE)
In generale, è una buona idea evitare di concedere tutti i privilegi a un account; invece, considera di seguire il principio del privilegio minimo. Tieni inoltre presente che la concessione di privilegi aggiuntivi a un determinato utente non rimuove i privilegi che erano in vigore in precedenza. Puoi anche visualizzare i privilegi di un utente specifico usando questa sintassi (sostituisci nome utente con il nome utente del tuo utente):
SHOW GRANTS FOR ‘username’;
Riepilogo
Quando hai a che fare con i privilegi in MySQL, tieni presente che dovresti seguire il principio del privilegio minimo (cioè, concedere solo i privilegi necessari). Seguire i consigli delineati in questo blog dovrebbe aiutare a rendere più sicura l'installazione di MySQL. Ricorda che i tuoi privilegi devono essere salvati per avere effetto (l'istruzione FLUSH PRIVILEGES può aiutarti a farlo), inoltre, tieni presente che da MySQL 8.0.16 puoi utilizzare i ruoli in MySQL per assegnare set di privilegi a un utente specifico.
Ci auguriamo che questo post del blog ti abbia aiutato a proteggere le tue istanze MySQL. Se hai domande o pensieri, sentiti libero di commentare, considera anche di dare un'occhiata alla nostra serie di sicurezza MySQL (qui e qui)