Carissimi,
ho l'intenzione di creare una tabella nel mio database nella quale tutte le azioni svolte dagli utenti (d'ora innanzi con utenti intenderò gli utenti del mio software, non quelli che si connettono al database) vengano tracciate, con data, ora, ip di provenienza e (qualora disponibile, ovvero non nei casi di login con credenziali errate) utente. Vi chiedo qualche consiglio al proposito.
Premetto che sto utilizzando Postgre ma come al solito vi chiederei caldamente di indicarmi soluzioni non vincolate ad un particolare tipo di database in quanto vorrei adattare il mio progetto anche ad altre basi di dati (mySql, DB2 ecc).
1. USO DI TABELLE NASCOSTE O CONNESSIONI DIVERSE DA QUELLE DEL SOFTWARE
O una persona accede direttamente al tool di amministrazione del database con credenziali di amministratore, ed allora può vedere tutto, o una persona usa il mio software, ed allora può vedere solo quello che il mio software le permette di vedere, quindi non certo la tabella di log in questione, la cui vista riserverò solo all'utente administrator del mio programma. Per questo motivo pposso creare questa tabella senza particolari connessioni diverse da quella principale, e con le stesse modalità con le quali ho creato le altre. Condividete questa mia affermazione o secondo le più rigorose regole di sicurezza dovrei agire diversamente?
2. ESEGUIRE LA SUA SCRITTURA DAL MIO PROGRAMMA O DA UN TRIGGER?
Credo che un conto sia chiedere alla mia applicazione, ogni volta in cui esegue una operazione, di inviare una query aggiuntiva al database raddoppiando di fatto il carico del suo lavoro; altro conto sia fare in modo che la base di dati, in automatico, provveda in merito con un bel trigger. Se siete d'accordo con questa mia riflessione, e se vi risulta che i trigger siano presenti nei più importanti database anche diversi da Postgre (DB2, MySql, Sql Server ecc) allora vi chiedo, essendo un pò ignorante in materia, potete indicarmi una function che esegua una query di insert? Non vi chiedo di indicarmi ovviamente la sintassi della query (che naturalmente conosco), né quella del trigger (dal mio tool di amministrazione basta semplicemente selezionare la funzione e flaggare gli eventi per i quali si desidera scatenarla) ma solo della funzione in sé, ovvero qualcosa tipo function (esegui la query che ho già pronta). Purtroppo in PostgreAdmin ho diversi linguaggi a disposizione (SQL, C, PGSQL). Volendo adattare la mia function a diversi db, ho scelto il linguaggio SQL; condividete la mia scelta? Ma se provo anche con una funzione banalissima vedo un messaggio di errore. Sono sicuro, nelle function di un database deve esserci una particolare sintassi che mi sfugge. Come potrei ad esempio scrivere una function che esegua un banale INSERT INTO tbl_prova (nome) VALUES ('Antonio')?