Usuário com melhor resposta
Capturar HOST_NAME

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()
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]
- Sugerido como Resposta Eduardo.Romero quinta-feira, 5 de março de 2015 13:55
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 6 de março de 2015 19:09
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]
-
-
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]
- Sugerido como Resposta Eduardo.Romero quinta-feira, 5 de março de 2015 13:55
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 6 de março de 2015 19:09
-
-
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]