SQL Server: Conectando SSMS utilizando Credencial do Windows
Olá pessoal, tudo certo?
No post de hoje vou compartilhar um caso do dia-a-dia que tive que atender e achei bem interessante.
Como muitos sabem, neste momento obscuro da humanidade causado pelo COVID-19, muitas empresas implementaram a rotina de trabalho home-office, o que creio que será o futuro de muitas empresas, mesmo quando essa pandemia acabar.
Conectando no SQL Server com Credencial do Windows
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”.
LEIA TAMBÉM: SQL Server: como identificar e comprimir tabelas e índices sem compressão de dados
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”.
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-001.png?resize=678%2C157&ssl=1)
No “Credential Manager”, selecione o “Windows Credentials” -à “Add a Windows credential”.
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-002.png?resize=609%2C512&ssl=1)
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
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-003.png?resize=611%2C249&ssl=1)
- 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”.
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/image.png?resize=384%2C256&ssl=1)
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!!!
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-005.png?resize=678%2C124&ssl=1)
Criando a credencial utilizando o FQDN:
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-004.png?resize=560%2C184&ssl=1)
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.
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-007-1.png?resize=678%2C542&ssl=1)
Para conectar no SSMS é necessário adicionar as entradas na tabela de hosts do Windows “C:\Windows\System32\drivers\etc\hosts”.
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-008.png?resize=678%2C426&ssl=1)
Após adicionar as entradas na tabela de hosts, basta conectar no SSMS normalmente.
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/image-1.png?resize=353%2C234&ssl=1)
![](https://i0.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-009-1.png?resize=345%2C199&ssl=1)
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;
![](https://i1.wp.com/www.tiagoneves.net/blog/wp-content/uploads/2020/07/Conect_Windows_Authentication_Windows_Credential-010.png?fit=678%2C172&ssl=1)
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,
Tiago Neves
Artigo original do blog de Tiago Neves
LEIA TAMBÉM: Automatizando testes de integração: um exemplo com Azure DevOps, SQL Server, Postman e .NET 7