La tua domanda può essere parafrasata come:
Come impedisci a qualcuno che ha accesso di modificare i dati dalla modifica dei dati?
Il primo passo è garantire che solo le persone che si prevede abbiano accesso abbiano accesso. Si tratta di buone pratiche di gestione delle password e di verifica dell'account (per coloro che sono attesi ad un certo punto di accedere) mentre si prevengono persone a cui non si intende accedere, patch regolari, ispezioni di codice e test delle penne.
Ma non puoi impedire al tuo amministratore di sistema di impazzire (a parte buoni stipendi e condizioni di lavoro, ecc.) e non puoi mai dimostrare che il tuo sistema è completamente sicuro. Ma ci sono ancora cose che puoi fare per prevenire o contenere tale attività.
La classica app web a 3 livelli ha un account di servizio sul livello applicazione che si collega al database. Ho visto spesso (e in passato scritto) app in cui questo account ha accesso in lettura / scrittura a tutte le tabelle contenenti i dati da manipolare. La limitazione delle operazioni di lettura e scrittura a record specifici mediante l'utilizzo di procedure memorizzate fornisce una certa attenuazione.
Un approccio complementare consiste nel rendere l'autenticazione dal livello applicazione al database dipendente dalle credenziali fornite dall'utente finale piuttosto che considerare semplicemente la convalida delle credenziali dell'utente come test del gateway. Nel modo più semplice, gli utenti finali verrebbero creati come utenti del database e l'applicazione memorizzerebbe le proprie credenziali ogni volta che è necessario connettersi. Tuttavia, questo approccio presenta problemi di scalabilità, in particolare con Oracle, che presenta un processo di autenticazione piuttosto loquace, con il risultato che la maggior parte delle app su Oracle riutilizza le connessioni persistenti. In assenza di ulteriori controlli, significa anche che le password degli utenti finali vengono archiviate in testo chiaro anziché solo la password di servizio in chiaro (ma esistono soluzioni a questo).
L'altro pezzo importante del puzzle, dopo aver fatto tutto il possibile per prevenire un incidente, è il rilevamento: Catturare gli identificatori del client (indirizzo IP) quando vengono modificati i dati importanti: catturare le query e il DML che viene inviato a quel database e verificandolo: distribuendo i dati honeypot / canary