Stiamo sviluppando un'applicazione Web che utilizza asp.net e server sql. Siamo tenuti a fare un audit trail per l'applicazione. A quanto mi risulta, una traccia di controllo sarebbe fondamentalmente per tutti gli inserti, gli aggiornamenti e le eliminazioni nella base di dati giusto? Ora il modo per avvicinarsi a questo è che ho una tabella Audit Trail nel DB che popola dopo che ogni inserto, aggiornamento o cancellazione è stato attivato (Scrittura manuale dello script all'interno del DAL). Tuttavia, eventuali modifiche ai DB direttamente attivate da SQL Management studio NON verranno registrate (per ovvi motivi: P).Audit Trail nell'applicazione Web che utilizza il server sql
Per far ciò potrei creare un trigger e che si occupa di tutto. Ho anche fatto qualche ricerca su google e ho scoperto che il server SQL ha la capacità di fare audit trail. Tuttavia, il problema con l'utilizzo dei trigger è che NON otterrò le informazioni dell'utente che hanno effettuato l'accesso al sito Web. Otterrò l'utente sql ma non me ne frega niente, sono preoccupato per l'utente del sito.
Una soluzione che ho scoperto era a) Avere una traccia di controllo dalla mia applicazione Web e avere anche la configurazione del trigger. Nella relazione di controllo, mostro semplicemente un registro di controllo dall'applicazione Web e il registro di controllo dal server SQL. Problemi ovvi con questo approccio: sopra la testa. Scrivere su due diversi gruppi di tabelle su OGNI DB CHANGE.
b) Ho una colonna denominata UserId ON OGNI DB TABLE. Quindi creo un trigger per catturare tutte le modifiche del DB. Passo questo ID utente su ogni tabella che cambio (inserisci, aggiorna, cancella) e ottengo questo ID dal trigger. Ostacoli evidenti: colonna utente inutile in ogni tabella
Mi scuso per il post lungo. Fondamentalmente ho bisogno di un registro di controllo che registri tutte le modifiche db (incluso l'accesso diretto a db) ma allo stesso tempo mi fornisce le informazioni di accesso dell'utente per le modifiche db apportate dall'applicazione web.
Apprezzerà qualsiasi input in merito.
Molte grazie
xeshu
Personalmente sono d'accordo con te al 100%. La preoccupazione principale è fondamentalmente se qualcuno semplicemente passa direttamente al db e inizia a giocherellare con i dati, ma come dici tu, potrebbe semplicemente rimuovere i trigger tutti insieme quindi è davvero inutile avere trigger solo per quella probabilità dello 0.00001% che potrebbe essere cancellato molto bene se l'hacker dovesse intervenire. Saluti per la risposta :) – xeshu
L'auditing nel database SQL mi sembra molto più sicuro. So da dove vieni, ma Diebold ha ottenuto una buona dose di cattiva stampa per l'auditing attraverso la loro applicazione e non attraverso il loro database: http://www.bbvforums.org/forums/messages/2197/2368.html – sarnold
dipende dalla tua applicazione, un sistema di voto avrebbe bisogno di controlli molto più severi rispetto alla maggior parte delle applicazioni. Può sembrare più sicuro, ma l'aggiunta della registrazione a livello di database tramite trigger SQL non offre in pratica molta più sicurezza dell'avanzamento del controllo rispetto al controllo a livello di applicazione. Chiunque abbia accesso alla base dati e alle permissioni pertinenti può modificare i trigger e inserire/aggiornare/eliminare record in una tabella di controllo.È più facile impedire l'accesso diretto al database e costruire la sicurezza e l'adulazione nell'app piuttosto che consentire l'accesso al database e gestire permessi SQL di livello fine. –