none
host_name() RRS feed

  • Domanda

  • In un ambiente di rete ho sempre usato la funzione host_name() per inserire e per recuperare dati di uno specifico host.

    nelle tabelle inserivo un campo con valore predefinito host_name() che al momento di inserimento del record mi inseriva il nome dell'host. Nelle viste inserivo una selezione come la presente :  where lhost = host_name() e mi venivamo restituiti solo i record riferiti all'host.

    Ora in un ambiente di rete con desktop remoti (terminal server) non posso più identificare gli utenti con il solo nome host in quanto tutti gli utenti collegati in remoto hanno lo stesso nome_host().

    Devo quindi aggiungere un riferimento al nome utente di login di windows, che con le Api posso trovare (Lib "advapi32.dll" Alias "GetUserNameA") ma in SQL Server come trovo?

    Ho pensato anche alla funzione system_user o a suser_sname()  ma in autenticazione di Sql Server e di Windows  mi restituiscono lo stesso nome di utente se loggato più volte.

    Esiste una funzione in SQL Server che mi restituisca il nome dell'utente windows loggato?

    Grazie a tutti

    Dell'Oca Marco 

    lunedì 4 aprile 2011 10:55

Risposte

  • Ciao Giorgio

    certo in questo modo però devo modificare un sacco di passi di programma nel gestionale collegato al database.

    Se potessi recuperare il nome dell'utente di windows loggato dovrei modificare solo la tabella e la vista.

    Grazie

    Marco Dell'Oca

    • Contrassegnato come risposta Marco Dell'Oca martedì 5 aprile 2011 07:53
    martedì 5 aprile 2011 07:52

Tutte le risposte

  • Ciao Marco,

    oltre a Host_name()  aggiungi  alla tabella un campo che abbia come valore
    predefinito Host_Id(), poi modifica la Vista filtrandola anche per il campo
    appena aggiunto. where lhost = host_name AND lhostid = Host_Id()

    Host_Id() rende il "Process Id" del programma che ha aperto la
    connessione, quindi un valore univoco nell'ambito dello stesso computer.
    Per maggiori info vedi:
    http://msdn.microsoft.com/en-us/library/ms177605.aspx

    Ciao
    Giorgio Rancati

    lunedì 4 aprile 2011 14:35
    Moderatore
  • Ciao Giorgio,

    con Host_ID e Host_Name() posso gestire i dati temporanei che dopo la chiusura di una connessione potrei non ritrovare.

    Se però devo memorizzare dei parametri utente specifici da richiamare al momento della connessione, come faccio?

    Grazie per la risposta

    Marco Dell'Oca

     

     

    lunedì 4 aprile 2011 15:21
  • Ciao Marco,

    sì, esatto, io utilizzo Host_Id + Host_Name per dati temporanei e non ho pensato che potevi averne bisogno anche dopo aver chiuso e riaperto il programma client.

    Nel tuo caso credo che l'unica soluzione sia quella di passare il riferimento dell'utente a una Stored procedure che popola la tabella, poi per il recupero dati, utilizzare al posto della vista una funzione o una seconda Sp passandogli il riferimento dell'utente da filtratre.

    Ciao
    Giorgio Rancati


    lunedì 4 aprile 2011 15:36
    Moderatore
  • Ciao Giorgio

    certo in questo modo però devo modificare un sacco di passi di programma nel gestionale collegato al database.

    Se potessi recuperare il nome dell'utente di windows loggato dovrei modificare solo la tabella e la vista.

    Grazie

    Marco Dell'Oca

    • Contrassegnato come risposta Marco Dell'Oca martedì 5 aprile 2011 07:53
    martedì 5 aprile 2011 07:52