Αυτό που περιγράφεις ονομάζεται auditing και μπορείς να τo κάνεις σε επίπεδο βάσης ή σε επίπεδο εφαρμογής.
Σε επίπεδο βάσης, τα SELECT statements δεν υποστηρίζουν triggers πράγμα που σημαίνει ότι θα πρέπει να τα αντικαταστήσεις με user defined functions ή stored procedures που θα εισάγουν τα απαραίτητα data στον πίνακα που θα περιέχει την audit πληροφορία. Επιπρόσθετα, ανάλογα με το πως θα στηθεί το security μοντέλο του SQL Server, μπορεί να μην έχεις την πληροφορία του user που κάνει την ενέργεια καθώς ενδέχεται όλοι οι χρήστες να γίνονται map σε ένα account στον SQL Server. Εναλλακτικά, μπορείς να το κάνεις με τον Profiler αλλά εκεί πρέπει να ζυγίσεις το θέμα του overhead που έχει το tracing. Στον SQL Server 2008 έχουν προσθέσει ένα χαρακτηριστικό που λέγεται "SQL Server Audit" που είναι πιο lightweight από το tracing. Δες εδώ για περισσότερες πληροφορίες: http://msdn.microsoft.com/en-us/library/cc280386.aspx, http://msdn.microsoft.com/en-us/library/dd392015.aspx
Σε επίπεδο εφαρμογής, απλά θα πρέπει να φροντίζεις πριν ή/και μετά από κάθε data access operation να γράφεις σε κάποιον άλλον πίνακα τις πληροφορίες που σε ενδιαφέρουν. Ακούγεται εύκολο ωστόσο αν δεν σχεδιαστεί σωστά θα καταλλήξεις να έχεις πολύ μπερδεμένο κώδικα καθώς θα μπλέκεται το auditing με το business logic. Επίσης, αν κάποιος (που ξέρει τον τρόπο) συνδεθεί μέσω SQL Server Management Studio, θα μπορεί να στείλει οποιοδήποτε query προς τη βάση χωρίς να καταγραφεί η ενέργειά του.
Vir prudens non contra ventum mingit