none
Capturar HOST_NAME RRS feed

  • Pergunta

  • Olá pessoALL,

    Tenho uma aplicação web que acessa o banco de dados através do Entity Framework. A aplicação e o banco estão em servidores diferentes. Agora vem o problema. Preciso de algum forma capturar o hostname ou ip da maquina do usuário que acessou a aplicação e fez algum DML no banco  de dados. Ressalto que preciso montar essa solução no banco de dados sem precisar alterar a minha aplicação. Tentei usar os comandos relacionados através de uma trigger de logon mas não deu certo, pois, os comandos pegam as informações do servidor de aplicação. Alguém teria uma sugestão. Desde já obrigado.

    ORIGINAL_LOGIN(), HOST_NAME(),USER, @@SPID, GETDATE(), APP_NAME(), DB_NAME()

    quarta-feira, 4 de março de 2015 00:21

Respostas

  • fdsilva,

    Veja se este exemplo pode te ajudar:

    SELECT  ec.client_net_address, 
                  es.[program_name],
                  es.[host_name], 
                  es.login_name,
                  COUNT(ec.session_id) AS [connection count]
    FROM sys.dm_exec_sessions AS es INNER JOIN sys.dm_exec_connections AS ec
                                                               ON es.session_id = ec.session_id
    GROUP BY ec.client_net_address, 
                      es.[program_name],
                      es.[host_name], 
                      es.login_name
    ORDER BY ec.client_net_address,  es.[program_name];

    ou este outro:

    SELECT sess.session_id, 
                sess.login_time, 
                sess.original_login_name, 
                sess.login_name, 
                sess.host_name, 
                sess.program_name 
     FROM sys.dm_exec_sessions sess Inner JOIN sys.dm_exec_connections conn 
                                                               ON sess.session_id = conn.session_id
    


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 4 de março de 2015 23:27

Todas as Respostas

  • fdsilva6,

    Talvez a consulta abaixo possa ajuda-lo a descobrir o IP e utilizar no trigger:

    SELECT  
       client_net_address
    FROM
       sys.dm_exec_connections
    WHERE
       session_id = @@SPID
    Espero que o ajude.


    [MCP | MCSA Microsoft SQL Server 2012 | MCTS Microsoft Dynamics CRM 2011]

    quarta-feira, 4 de março de 2015 01:15
  • Infelizmente o comando sugerido pelo colega trouxe as informações do servidor de aplicação.

    Alguém teria outra sugestão?



    quarta-feira, 4 de março de 2015 11:14
  • fdsilva,

    Veja se este exemplo pode te ajudar:

    SELECT  ec.client_net_address, 
                  es.[program_name],
                  es.[host_name], 
                  es.login_name,
                  COUNT(ec.session_id) AS [connection count]
    FROM sys.dm_exec_sessions AS es INNER JOIN sys.dm_exec_connections AS ec
                                                               ON es.session_id = ec.session_id
    GROUP BY ec.client_net_address, 
                      es.[program_name],
                      es.[host_name], 
                      es.login_name
    ORDER BY ec.client_net_address,  es.[program_name];

    ou este outro:

    SELECT sess.session_id, 
                sess.login_time, 
                sess.original_login_name, 
                sess.login_name, 
                sess.host_name, 
                sess.program_name 
     FROM sys.dm_exec_sessions sess Inner JOIN sys.dm_exec_connections conn 
                                                               ON sess.session_id = conn.session_id
    


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 4 de março de 2015 23:27
  • Infelizmente não funcionou. O SQL pegou o IP do servidor de aplicação e não do usuário que se logou na aplicação e posteriormente acessou o banco.
    segunda-feira, 9 de março de 2015 11:45
  • fdsilva6,

    Neste caso, eu acho mais fácil você tentar obter o IP da estação diretamente na aplicação e repassar para alguma tabela do seu banco de dados.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 9 de março de 2015 23:46