none
SP_WHO2 não funciona (SQL Server 2008) RRS feed

  • Pergunta

  • Olá a todos... Estou com um sério problema aqui.

     

    Tenho um sistema com BD Sql Server e restringo o acesso ao programa (controle de licenças) atraves da seguinte verificação:

    --EXTERNAS (Terminal Server)
    SELECT PROGRAM_NAME, MASTER.DBO.SYSPROCESSES.DBID, NET_ADDRESS, SPID
    FROM ( MASTER.DBO.SYSPROCESSES  
    INNER JOIN MASTER.DBO.SYSDATABASES ON MASTER.DBO.SYSPROCESSES.DBID = MASTER.DBO.SYSDATABASES.DBID )  
    WHERE MASTER.DBO.SYSDATABASES.NAME = 'NOME_DO_BANCO'  
    AND LOGINAME = 'USUARIO_BD'  
    --AND UPPER(PROGRAM_NAME) = 'GESTPLUS'  
    AND UPPER(NET_LIBRARY) = 'LPC'  
    AND CONVERT(CHAR(19), LOGIN_TIME, 120) <> CONVERT(CHAR(19), LAST_BATCH, 120) 
    GROUP BY PROGRAM_NAME, MASTER.DBO.SYSPROCESSES.DBID, NET_ADDRESS, SPID
    
    
    --INTERNAS (Rede local)
    SELECT PROGRAM_NAME, MASTER.DBO.SYSPROCESSES.DBID, NET_ADDRESS, HOSTNAME 
    FROM ( MASTER.DBO.SYSPROCESSES  
    INNER JOIN MASTER.DBO.SYSDATABASES ON MASTER.DBO.SYSPROCESSES.DBID = MASTER.DBO.SYSDATABASES.DBID )  
    WHERE MASTER.DBO.SYSDATABASES.NAME = 'NOME_DO_BANCO'  
    AND LOGINAME = 'USUARIO_BD'  
    --AND UPPER(PROGRAM_NAME) = 'GESTPLUS'  
    AND UPPER(NET_LIBRARY) <> 'LPC'  
    GROUP BY PROGRAM_NAME, MASTER.DBO.SYSPROCESSES.DBID, NET_ADDRESS, HOSTNAME 
    
    

    Ela funciona perfeitamente com a maioria dos clientes, mas alguns clientes que possuem filiais em outras cidades e acessam o mesmo banco tem tido liberdade para acessar quantas vezes quizer.

     

    O que ocorre é que as instruções acima só retornam o usuário que logou no sistema naquele momento, deixando de retornar os demais. Excemplo: Existem 20 pessoas logadas no sistema agora. Se outro usuario entrar no sistema, a função que mostar a quantidade de usuarios logados retorna apenas um registro ao invés de 21 registros...

     

    Já tentei usar outras instruções como:

    SP_WHO
    SP_WHO2
    SELECT * FROM sys.dm_exec_sessions
    
    ...mas não tive exito (Sempre retorna apenas a conexão criada ao rodar o select).

     

    Alguém pode me ajudar com essa bomba?

    • Movido Gustavo Maia Aguiar quinta-feira, 12 de agosto de 2010 18:31 (De:SQL Server - Desenvolvimento Geral)
    quinta-feira, 12 de agosto de 2010 14:04

Respostas

  • Neste cliente que vc se refere, verifique se o usuário que está rodando o select para pegar os users conectados possui direitos como SA, por exemplo, se vc rodar esse script com um usuário comum em um banco A (que não tem acesso a outros bancos) ele vai retornar somente as sessões dele mesmo.

    Veja se é isto que está ocorrendo.


    http://ricardomura.spaces.live.com
    • Marcado como Resposta admsellos segunda-feira, 6 de setembro de 2010 17:40
    quarta-feira, 18 de agosto de 2010 13:31

Todas as Respostas

  • Ninguém???
    quarta-feira, 18 de agosto de 2010 11:41
  • Jônatas,

    Eu não consegui entender o que você esta querendo fazer!!!

    Você deseja limitar o acesso ou realizar um monitoramento?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    quarta-feira, 18 de agosto de 2010 13:00
    Moderador
  • Essa insturção serve para eu saber quantos usuários estão logados no meu programa. Através da quantidade de conexões abertas, posso monitorar e restringir acesso ao sistema...

     

    O fato é que em todos os clientes essa isntrução funciona corretamente, porém em um cliente, isso não acontece... Não sei se ele alterou alguma configuração no SQL Server dele...

    quarta-feira, 18 de agosto de 2010 13:21
  • Neste cliente que vc se refere, verifique se o usuário que está rodando o select para pegar os users conectados possui direitos como SA, por exemplo, se vc rodar esse script com um usuário comum em um banco A (que não tem acesso a outros bancos) ele vai retornar somente as sessões dele mesmo.

    Veja se é isto que está ocorrendo.


    http://ricardomura.spaces.live.com
    • Marcado como Resposta admsellos segunda-feira, 6 de setembro de 2010 17:40
    quarta-feira, 18 de agosto de 2010 13:31