Stavo pensando di recente ai passaggi per proteggere un server di database. Molti di noi sono consapevoli di come gestire la sicurezza dal lato delle applicazioni, anche se un utente malintenzionato potrebbe trovare il modo di aggirare la sicurezza dell'applicazione e sfruttare il database.
Scenario
Considera di avere un database con i seguenti prefissi tabella blog_
e website_
(per esempi e semplicità, K.I.S.S.)
Sto pensando a qualcosa sulla falsariga di quanto segue, ma non sono sicuro quale sia appropriato e quale sia un eccesso, quindi lo scopo della domanda.
Soluzione 1 : Una scrittura, molte leggi
- Avere solo 1 utente nell'applicazione con accesso in scrittura sul database. Su tutte le tabelle
- avere più di un utente con accesso in lettura al database, ma separati su una base di tabella (per un prefisso specifico). Significa che ogni utente RO db legge rispettivamente l'accesso solo al proprio set di tabelle.
global_write@localhost: writes to all tables in the database
blog_read@localhost: Reads from tables with prefix
blog_
website_read@localhost: Reads from tables with prefix
website_
Soluzione 2 : una lettura e una scrittura per tabella
- avere una coppia di utenti db per componente di applicazione, uno da leggere e uno da scrivere
blog_read@localhost: Reads from tables with prefix
blog_
blog_write@localhost: Writes to tables with prefix
blog_
website_read@localhost: Reads from tables with prefix
website_
website_write@localhost: Writes to tables with prefix
website_
Soluzione 3 : Solo una coppia di account è sufficiente
- Solo una coppia di account è responsabile dell'intero database
global_read@localhost: Reads from all tables
global_write@localhost: Writes to all tables
TL; DR
Soluzione 1 : Una scrittura, molte leggi
Soluzione 2 : una lettura e una scrittura per tabella
Soluzione 3 : Solo una coppia di account è sufficiente
- Sono tutti appropriati?
- Quali sono overhead?
PS: Scusa se non ho taggato in modo appropriato con access-control