Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Sicurezza esterna

Come rendere sicura la connessione di MySQL verso l'esterno: utenti e privilegi del database
Come rendere sicura la connessione di MySQL verso l'esterno: utenti e privilegi del database
Link copiato negli appunti

L'interazione client/server avviene attraverso la connessione del client al server con paradigma di autenticazione basato su username/password (in chiaro). La lista di utenti, password e permessi relativi a MySQL è immagazzinata in alcune sue tabelle:

  • user: elenca account, host, password e privilegi globali (ossia validi per tutte le tabelle) degli utenti che possono connettersi al database server, nonché le opzioni sull'SSL e sull'utilizzo delle risorse;
  • db: elenca account e relativi privilegi, database per database;
  • tables_priv e columns_priv: specificano account e relativi privilegi a livello di singola tabella o colonna.
  • root è l'account di amministrazione di MySQL; non ha nulla a che fare con l'account di Linux, se non per il nome e la capacità di provocare danni se mal usato...

È possibile modificarne il nome o crearne più d'uno. Ad ogni modo, root è l'unico utente che deve possedere il pieno controllo del server (operazioni SQL sulle tabelle, riavvio di mysqld, eccetera), tutti i rimanenti utenti non devono possedere privilegi globali, ma locali alle tabelle che utilizzano (pensiamo a più programmi Web sul server, ciascuno abilitato ad eseguire query SQL sulle sole tabelle cui deve poter avere accesso).

Le regole generali sono:

  • non utilizzare account senza password (soprattutto per root, ciò che è di default!);
  • far accedere ogni applicazione o programma Web tramite un proprio utente;
  • concedere ad ognuno i minimi privilegi possibili, il resto è "il male";
  • concedere come detto privilegi per singoli database, facendo attenzione a che nessuno tranne root abbia accesso alla tabella mysql, che contiene le regole stesse di accesso;
  • concedere il privilegio FILE con molta parsimonia, anzi bandirlo (permette di leggere sul filesystem del server Linux);
  • ogni altro privilegio amministrativo dovrà esser dato con (molta) parsimonia.

Le tipologie dei privilegi sono:

Privilegi amministrativi:

Privilegio Funzione
CREATE USER  permette di creare, cancellare e rinominare gli account utente;
GRANT  permette di concedere i propri privilegi ad altri account; l'inverso è REVOKE;
LOCK TABLES  permette di eseguire lock su tabelle (per il thread corrente);
PROCESS  permette di visualizzare le informazioni sui thread in esecuzione sul server;
REFERENCES  non usato;
RELOAD  permette di ricaricare le tabelle dei permessi, svuotare i registri o la cache attraverso i relativi comandi;
REPLICATION C/S  accorda il diritto di richiedere informazioni relative ai server di replica;
SHOW DATABASES  permette di visualizzare la lista completa dei database;
SHUTDOWN  permette di arrestare il server database;
SUPER  permette di eseguire operazioni di amministrazione (MySQL permette connessioni anche oltre gli eventuali limiti imposti per utenti in possesso di tali privilegi).

Privilegi per database, tabelle e colonne - struttura;

Privilegio Funzione
ALTER  permette di alterare la struttura delle tabelle esistenti;
ALTER ROUTINE  permette la modifica e la cancellazione di stored procedure memorizzate;
CREATE  permette di creare nuove tabelle e database;
CREATE TEMPORARY TABLES  consente di creare tabelle temporanee;
CREATE ROUTINE  permette la creazione di stored procedures;
CREATE VIEW  permette la creazione di nuove viste;
DROP  permette di eliminare database e tabelle;
EXECUTE  consente di eseguire stored procedures;
INDEX  permette di creare ed eliminare indici;
SHOW VIEW  permette la visualizzazione delle viste.

Privilegi per database, tabelle e colonne - dati:

Privilegio Funzione
DELETE  permette di cancellare righe nelle tabelle;
FILE  consente di leggere e scrivere file sul filesystem (ove l'utente mysql ne ha i permessi);
INSERT  permette di inserire righe nelle tabelle;
SELECT  consente di estrarre righe dalle tabelle;
UPDATE  permette di aggiornare i dati nelle tabelle.

Non ci occuperemo dell'organizzazione interna delle tabelle user, db, tables_priv e columns_priv in quanto, per la configurazione degli account, useremo
un frontend grafico: phpMyAdmin.

Ti consigliamo anche