Utilizando o CONTEXT_INFO para monitorar usuários de aplicações web

Bem, enquanto não continuo com a série de artigos sobre projeto de banco de dados, vou aproveitar para postar algo que utilizei recentemente e acredito ser interessante.

Em muitos sistemas web, é comum haver apenas um usuário que faz a conexão com o banco de dados. Não sei como isto é implementado em outros lugares, mas conheço alguns que fazem essa conexão e não passam nenhuma informação para o SQL Server sobre que usuário está utilizando aquela conexão. Ai vem a pergunta: qual o problema nisso?

O problema é que, em um eventual erro do sistema, problema de performance, etc.. você não tem como descobrir qual a conexão daquele usuário e executar um trace, por exemplo.

Para tentar resolver isso, utilizei um comando não muito utilizado do SQL Server 2005, o SET CONTEXT_INFO.

O que este comando faz?! Ele permite que você associe até 128 bytes de informação binária para a conexão/sessão do usuário.

O destaque na palavra binária acima não é por acaso. Quando falo binária é a palavra ao pé da letra. Você não pode enviar uma string para o context_info, o que por si só não é um problema, caso você saiba lidar com ele.

No meu caso, implementei a solução da seguinte forma.

DECLARE @USUARIO VARBINARY(128)

SET @USUARIO = (CAST(‘Login’ as VARBINARY(128)))

SET CONTEXT_INFO @USUARIO

Pronto, fazendo isso com toda conexão de usuário na sua aplicação web, você, mesmo utilizando apenas um usuário de banco para a conexão, saberá a quem pertence cada conexão.

Mas e agora, como verificamos isso pelo SQL Server?

Basta executar o seguinte comando:

select session_id, cast(context_info as varchar) as usuario
from sys.dm_exec_sessions
where session_id > 50  — para listar apenas conexões de usuários, ignorando as de sistema.

Com isso você terá uma listagem de todos os SPIDs e o nome do respectivo usuário, podendo agora fazer um trace pelo SPID em questão e monitorar o que determinado usuário está fazendo!

Esse post foi publicado em Não categorizado. Bookmark o link permanente.

2 respostas para Utilizando o CONTEXT_INFO para monitorar usuários de aplicações web

  1. Heberton disse:

    Olá Vladimir, Muito bom mesmo essa entrada no blog.Estou trabalhando com programação Web e SQL Server, vou tirar um tempo para brincar com esse exemplo que você utilizou.Atenciosamente,Heberton Melo

  2. Vladimir Michel disse:

    Legal Heberton.Pelo menos pra mim quebrou um galhão, espero que te ajude também!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s