Una delle cose comuni che si vedono nell'installazione di persone sono gli utenti del database (per l'uso da un'applicazione vera e propria) che dispongono solo delle autorizzazioni SELECT / UPDATE / INSERT / DELETE. Un utente separato (che ha in aggiunta CREATE / ALTER / DROP / etc) viene utilizzato per distribuire effettivamente gli aggiornamenti dello schema (un account amministratore o un utente dedicato a tale scopo).
Mi chiedo quale sia il motivo dietro questo.
Ci sono due situazioni che sto esaminando in modo specifico, sia in un ambiente di distribuzione continuo (quindi l'applicazione viene creata e distribuita automaticamente):
- Un sistema di distribuzione separato esegue gli aggiornamenti dello schema durante la distribuzione dell'app stessa.
- L'applicazione esegue i propri aggiornamenti dello schema all'avvio iniziale.
Lo scenario 2 è spesso necessario quando ci sono molti ambienti che vengono distribuiti su reti separate (ad esempio, i VPC di AWS separati).
Nel caso dello scenario 1, non è un grosso problema avere un account utente separato con i privilegi dello schema, ma nel caso di 2, lo è.
L'unica spiegazione logica che ho mai sentito è la frase di sbocco "meno privilegi sono migliori per la sicurezza". Non è che non sono d'accordo con questa affermazione, ma mi piacerebbe capire perché è meglio per la sicurezza.
Penso che questo si riduce alla domanda: se qualcuno compromette le credenziali ... cosa possono fare con i privilegi dello schema che non possono fare con solo SELECT / UPDATE / DELETE?
- "Distruggi" il database? DELETE è perfettamente in grado di farlo. UPDATE / INSERT è probabilmente ancora più pericoloso in quanto un utente malintenzionato potrebbe modificare in modo subdolo i dati esistenti in un modo che non causerà un errore catastrofico evidente come cadere una tabella o eliminare tutte le righe
- Estrai dati? SELEZIONA.
- Modifica lo schema? Uh .. a che fine? Se fatto in un modo che rompe l'app, è ovvio, e in entrambi i casi, può essere rimosso dalla prossima distribuzione dell'app.
Mi manca qualcos'altro?