Come identificare il nome host che esegue azioni su tabelle

di il
6 risposte

Come identificare il nome host che esegue azioni su tabelle

Buonasera a tutti,
se avvio il Monitoraggio attività di un Motore di DataBase, nella sezione processi riesco a monitorare vari parametri tra i quali Account di accesso, Applicazzione, Nome host, etc. (vedi foto), la mia richiesta è questa: quando viene creato o modificato un record in una tabella, è possibile inserire un campo nel quale SQL Server inserisca autonomamente il Nome host che ha effettuato quella operazione?



Grazie

6 Risposte

  • Re: Come identificare il nome host che esegue azioni su tabelle

    Non ho capito cosa vorresti
    Vuoi uno delle operazioni? Ma ci sono più client che eseguono operazioni direttamente sul db o è un server web che opera sul db?
  • Re: Come identificare il nome host che esegue azioni su tabelle

    Forse ho trovato la soluzione, ho inserito una colonna nella tabella e settato come valore predefinito: host_name()
    In questo modo quando quel record viene creato SQL Server inserisce nel campo il nome host che ha creato il record.
  • Re: Come identificare il nome host che esegue azioni su tabelle

    Per funzionare magari anche funziona ma devi assicurarti che faccia cio' che ti serve.

    e' come se qualcuno ti dicesse: ti pago 100
    tu rispondi: uno zero in piu' sarebbe meglio
    il tizio accetta e ti liquida con 0100
    che in OTTALE fa 64.
    Mi sa che non era quello che volevi


    il problema e' il nome di QUALE host?

    (è vero che 100 poteva essere 4 in binario e 64 e' meglio di 4, ma questa e' un'altra storia )
  • Re: Come identificare il nome host che esegue azioni su tabelle

    Ciao Davy

    Due considerazioni a riguardo.

    La prima, come ti è stato segnalato, è valutare quale "host" ti serve. Se hai un'applicazione client che accede direttamente a SqlServer, probabilmente la via che hai trovato è corretta, poichè ogni connessione parte dai PC che usano la tua app.
    Se invece passi da un server centralizzato, ad esempio tramite dei web-service o pagine web, allora avrai sempre un nome host nel database, però anzichè essere quello del PC da cui parte la richiesta, sarà sempre quello del server che fa le operazioni, rendendo probabilmente inutile l'informazione.

    La seconda è quella di valutare se la strada percorsa sia corretta. Se ti serve per "individuare il colpevole" nel caso di problemi, probabilmente la strada indicata può avere delle falle. Il valore di default viene messo solo quando la query di INSERT non lo specifica. Pertanto nessuno vieta di aggiungere un valore nella INSERT e così il valore di default viene ignorato.
    Se vuoi essere sicuro al 100% che sia l'host di inserimento, allora potresti valutare di usare un trigger che, in caso di insert, forzi il valore. In questo modo, anche se la INSERT indica un host, il tuo trigger lo sovrascrive col valore preso dal sistema, evitando che qualcuno possa forzarlo.
    Ovviamente poi devi gestire anche il fatto che nessuno possa modificarlo successivamente con una UPDATE...

    Non so se ti servano così tanti accorgimenti, magari nella tua realtà basta il meccanismo che hai implementato, però tienine conto perchè se ti servono certezze su quel campo, allora devi assicurarti di averle
  • Re: Come identificare il nome host che esegue azioni su tabelle

    Salve a tutti,
    la strada del trigger, come indicata da @PIGI78, sarebbe la piu' corretta...
    puoi verificare che sia un'operazione di INSERT e gestirla, ed allo stesso modo puoi verificare avvenga un UPDATE e rigettarlo...

    poi resta il problema gia' sopra evidenziato di avere l'effettiva valorizzazione come richiesto, e le indicazioni fornite sono ben articolate e valide

    salutoni romagnoli
    --
    Andrea
  • Re: Come identificare il nome host che esegue azioni su tabelle

    Ciao,
    per quanto riguarda l'inserimento di un record puoi provare con un semplice default value:
    ALTER TABLE Test ADD CONSTRAINT DefaultTest DEFAULT Host_Name() FOR HostName
    Per l'edit dei valori invece non vedo altre strade se non attraverso l'implementazione di codice proprietario (software che opera su quel db, trigger).
Devi accedere o registrarti per scrivere nel forum
6 risposte