Como impedir múltiplos logons em uma rede com Active Directory
- Introdução
O processo que vamos descrever aborda como impedir que o usuário possa se logar em mais de uma estação de trabalho com o mesmo login de rede do domínio.
Não se trata do recurso do Active Directory (Fig1) onde podemos limitar o login a uma ou mais estações, pois nesse caso o bloqueio fica limitado a uma lista pré-definida de máquinas (Fig2). A grande desvantagem é que caso seja necessária a troca de máquinas, geraria trabalho manual para o administrador de rede, que teria que alterar a lista a cada vez que isso acontecesse.
Fig1 – Propriedade de Account do Active Directory
Fig2 – Lista com computadores
Esse documento tem como finalidade explicar como limitar mais de um login em qualquer máquina da rede de forma automática, não havendo necessidade de associar determinada máquina a um usuário específico. Para isso vamos utilizar o Active Directory, GPOs (Group Policiy Objects), Scripts de Logon e Logoff e banco de dados SQL Express.
- Pré-requisitos
- Active Directory com domínio previamente configurado
- Estações Windows 2000 ou superior
- SQL Express (ferramenta gratuita, podendo ser instalada no mesmo servidor que hospeda o Active Directory. Em nosso exemplo trabalhamos com a versão 2005)
- GPMC (Group Policy Management Console – ferramenta gratuita para edição de políticas de grupo)
- Scripts de Logon, Logoff e SQL
Para baixar os scripts de Logon, Logoff e SQL, clique no link abaixo. Os scripts estão comentados para facilitar o entendimento.
Nos scripts login.vbs e logoff.vbs, onde aparece a string de conexão com o banco de dados, será preciso trocar os *** pelos dados reais de seu ambiente.
String de Conexão
“Provider=SQLOLEDB.1; Password=***;Persist Security Info=True;User ID=***;Initial Catalog=LOGON;Data Source=***”
User ID = Usuário com permissão no banco de dados
Password = Senha do usuário configurado no campo User ID
Data Source = Nome do servidor ( Geralmente MAQUINA\SQLEXPRESS onde MAQUINA é o nome do servidor onde foi instalado o SQL Express )
- Compartilhando os Scripts
Vamos trabalhar com dois vbscripts, um de Logon e outro de Logoff. Eles devem ficar em um local da rede que o usuário tenha acesso de execução, para isso sugerimos manter o padrão do Active Directory e utilizar o NETLOGON para esse fim.
- Criação das GPOs
Vamos iniciar pela criação das GPOs com os scripts de Logon e Logoff. Para realizar este procedimento iremos utilizar o console de edição de políticas GPMC (Group Policy Management Console).
1 – Vamos abrir o GPMC para criarmos e editarmos nossa policie de scripts de logon e logoff. Clique em start > run > e digite “gpmc.msc” (sem as aspas)
2 – Vamos escolher em qual Unidade Organizacional vamos linkar a policy, clicamos com o botão direito em cima dela e selecionamos a opção “Create and Link a GPO Here…”
3 – Com o editor de policies aberto vamos expandir: User Configuration > Windows Settings > selecionar Scripts (Logon/Logoff)
4 – Vamos iniciar dando um duplo clique em Logon. A janela de configuração irá se abrir e vamos clicar em Add e passar o caminho do compartilhamento criado no NETLOGON, no nosso exemplo \\SC-0000001\NETLOGON\LogonUnico\Login.vbs
5 – Vamos agora abrir o Logoff e fazer o mesmo procedimento, só que agora buscando o script de logoff no mesmo compartilhamento \\SC-0000001\NETLOGON\LogonUnico\Logoff.vbs
6 – Pronto, a política já está criada. Podemos forçar sua execução com o comando “gpupdate /force”.
- SQL Express
O controle dos usuários logados é feito através de um registro incluído no banco de dados assim que ele efetua o logon (login.vbs).
Será necessário:
- Instalar o SQL Express
- Criar um banco de dados e nomeá-lo como LOGON
- Criar a tabela USUARIOS ( LogonUnico.sql )
Banco e ferramentas de administração podem ser encontrados nos links abaixo:
- SQL Server 2005 Express Edition
http://download.microsoft.com/download/F/4/E/F4EE8AE2-4979-47F0-A931-791B2B7DCFA2/SQLEXPR32_PTB.EXE - SQL Server Management Studio Express
http://go.microsoft.com/fwlink/?linkid=65110 - SQL Server 2005 Express Edition with Advanced Services
http://go.microsoft.com/fwlink/?linkid=65109
- Resolução de problemas
O único problema encontrado foi nas sessões de terminal services. Quando há queda ou congelamento da sessão não é executado o logoff que por sua vez não limpa o registro do usuário na base.
Para limpar o registro manualmente execute no SQL um dos seguintes comandos:
/* DELETANDO REGISTRO POR USUARIO */
DECLARE @USUARIO VARCHAR(30)
SET @USUARIO = ‘USUARIO’ — COLOQUE O NOME DO USUARIO AQUI
DELETE FROM DBO.USUARIOS WHERE USUARIO = @USUARIO
/* DELETANDO REGISTRO POR MAQUINA */
DECLARE @MAQUINA VARCHAR(30)
SET @MAQUINA = ‘MAQUINA’ — COLOQUE O NOME DA MAQUINA AQUI
DELETE FROM DBO.USUARIOS WHERE MAQUINA = @MAQUINA
/* DELETANDO TODOS OS REGISTROS */
DELETE FROM DBO.USUARIOS
- Conclusão
O procedimento adotado nesse documento é uma alternativa simples aos softwares de mercado, pagos ou não, como LimitLogin da própria Microsoft. Não existe ferramenta de monitoria, ficando a manutenção e melhoria do processo por conta de cada administrador.
Autores:
Tiago Vieira Ferreira de Souza é idealizador do site Portal Tecnologia, atua desde 2004 como Administrador de Redes, com foco em tecnologias Microsot. Formado em Tecnologia em Redes de Computadores, MCP Windows Server 2003, MCTS Windows Vista.
Site: http://www.portaltecnologia.net/
E-mail: contato@tiagosouza.net
Marcelo Ramos Borges de Oliveira é MCP na plataforma .NET desde 2007, atua a aproximadamente 10 anos no mercado de TI. Atualmente é Gerente de TI em empresa de médio porte com foco em Desenvolvimento Web.
Site: http://www.marceloramos.net/Blog
E-mail: mramos.oliveira@gmail.com
BAIXE EM PDF
Tags: ActiveDirectory, GPO, sql, unicologon, vbscript, windows2003

May 31st, 2009 at 9:54 am
isso é muito bom pra dar um jeito naqueles usuários que as vezes querem usar um monte de máquinas ao mesmo tempo, e depois fica procurando aonde deixou aquele arquivo importante.
July 15th, 2009 at 3:57 pm
Boa, isso é para acabar com os usuario bisbilhoteiros de plantão.
Fico agradecido.
August 24th, 2009 at 6:48 pm
Otima solucao, funciona perfeitamente!!!
Muito mais simples e pratica do que as solucoes da Micro$oft!
Muito agradecido pela dica!!!
August 25th, 2009 at 10:11 pm
Wellington, muito obrigado pela visita e pelo comentário, que bom que gostou! Grande abraço!
October 21st, 2009 at 9:34 am
Pessoal, achei otimo o script vbs. Porém queria uma ajuda ou um auxilio de vocês. Preciso que esta regra não seja aplicada a 03 usuários da minha rede. Como eu criaria essa excessão no script? Já tentei porem só cai no logoff. Queria que ele verificasse a matricula do usuário e se existir, ele deixa fazer logon, se não for o usuário declarado no codigo ele faz todo o procedimento do script. teria como alguem me ajudar?
October 26th, 2009 at 9:18 am
Obrigada Tiago!
Fico no aguardo de tua ajuda!
October 26th, 2009 at 12:41 pm
aqui na empresa o usuário se loga e depois é feito o logoff sem outra pessoa se logar com o mesmo login, na tabela do sql não grava nada.
October 26th, 2009 at 12:50 pm
Bruno,
Você verificou se há algum cadastro no banco preso?
Não é terminal server certo?
[]s
July 16th, 2010 at 5:44 pm
Tiago, gostei do seu poste e testei em minha rede. No entanto, quando os usuários foram afetuar o login na máquina, apareceu o seguinte erro:
Linha: 2 – Caract.: 1 – Erro: Instrução esperada – Erro de compilação do Microsoft VB Script
Agradeço a atenção