No post de hoje vou compartilhar um caso do dia a dia que tive que atender e achei bem interessante. (O post original pode ser encontrado clicando aqui)
Como muitos sabem, neste momento obscuro da humanidade causado pela COVID-19, muitas empresas tem implementado a rotina de trabalho home-office, o que creio que será o futuro de muitas empresas, mesmo quando essa pandemia acabar.
Entendendo o cenário:
Uma das empresas que atendo implementou a rotina de trabalho home-office. Com isso, foi solicitado que as pessoas que precisam acessar o banco de dados continuem utilizando o método de autenticação “Windows Authentication”.
Os desenvolvedores fazem o acesso da seguinte forma:
- Utilizam os seus computadores pessoais;
- Conectam na VPN da empresa;
- Conectam diretamente no servidor utilizando um Remote Desktop;
- Por fim, acessam o banco de dados usando o SSMS com a autenticação “Windows Authentication”.
O cenário desejado para os desenvolvedores é:
- Que eles parem de utilizar o Remote Desktop para acessar diretamente o servidor;
- Passem a utilizar o seu próprio computador pessoal para acessar o banco de dados via SSMS (SQL Server Management Studio). Entretanto, eles ainda precisam utilizar a autenticação “Windows Authentication”.
Solução:
Pensei em algumas soluções possíveis:
- Publicar somente o SSMS no Remote Desktop, mas isso não atenderia à solicitação do cliente, pois eles continuariam utilizando o Remote Desktop; (solução descartada)
- Outra solução pensada foi utilizar o AD Azure, mas também demandaria tempo e custo; (solução descartada)
- Por fim, trocando uma ideia com o Wiluey Sousa, ele sugeriu criar as credenciais no Cofre de Credenciais do Windows. (solução utilizada!)
Agora vou mostrar um passo a passo de como podemos fazer isso!
Step-by-Step:
Em primeiro lugar, vamos abrir o “Control Panel” e pesquisar por “credential”.
No “Credential Manager”, selecione o “Windows Credentials” -à “Add a Windows credential”.
Nas credenciais, devemos cria-la utilizando o Endereço IP. Se você preferir utilizar o FQDN, será necessário adicionar uma entrada no Registro do Host do Windows. Agora vou mostrar como podemos fazer essas duas configurações. Vamos lá!
Criando a credencial utilizando o Endereço IP:
- Internet or network address – Nome do Servidor ou Endereço IP a ser utilizado. Um ponto muito importante é informar a PORTA do serviço do SQL Server. No meu caso, estou utilizando a porta 1433 (porta padrão do SQL Server).
- User Name – Informar o Nome do Usuário que você vai utilizar para se autenticar no AD.
- Password – Informar a Senha do Usuário. Um ponto de atenção é que se você digitar a senha errada ele não vai dar erro para criar a credencial, porém ao tentar se autenticar no SQL Server vai dar erro.
Ao criar a credencial, nós estamos vinculando o nosso usuário local com o usuário do servidor (Windows Authentication), como se estivéssemos utilizando o Remote Desktop.
Depois disso, no SSMS devemos informar o IP e selecionar o “Windows Authentication”.
Mesmo utilizando o “User Name” com o nome do seu usuário local, na verdade você vai se conectar no banco de dados utilizando a credencial no AD que você criou anteriormente.
Após conseguir conectar no banco de dados, podemos fazer um teste e visualizar as sessões utilizando o script abaixo:
SELECT conn.session_id, host_name, program_name,
nt_domain, login_name, connect_time, last_request_end_time
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
ON sess.session_id = conn.session_id;
Como podemos ver, o “login_name” está utilizando o usuário do domínio ao invés do usuário local que tinha aparecido na tela de conexão do SSMS! Show, conseguimos!!!
Criando a credencial utilizando o FQDN:
As informações são as mesmas da configuração utilizando o IP, a única diferença é que agora você deverá colocar o nome do DNS, mantendo a porta também.
Para conectar no SSMS é necessário adicionar as entradas na tabela de hosts do Windows “C:\Windows\System32\drivers\etc\hosts”.
Após adicionar as entradas na tabela de hosts, basta conectar no SSMS normalmente.
SELECT conn.session_id, host_name, program_name,
nt_domain, login_name, connect_time, last_request_end_time
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
ON sess.session_id = conn.session_id;
Essa foi a solução implementada no cliente! Espero que se vocês passarem por uma necessidade deste tipo, essa solução também possa ser útil.
Bom pessoal por hoje é isso.
Abraços,