SQL Server 2017 marcou a estreia do Microsoft SQL Server no Linux. A instalação do SQL Server no Linux é bem simples de ser realizada, porém para prover a capacidade de conectar ao servidor de banco de dados utilizando a autenticação integrada com o Windows requer alguns passos extras na instalação e configuração do servidor.
Recentemente a Microsoft lançou uma ferramenta para auxiliar neste processo de configuração – adutil (ainda em preview). Este artigo tem como objetivo mostrar o passo a passo da configuração da autenticação integrada com o AD utilizando o adutil.
Conhecendo o ambiente de teste
Seguem configurações do servidor de domínio utilizado neste exemplo:
- Nome da servidor: WIN-KL323M8KIP1
- Domínio: ESTUDO.NET
- Endereço IP: 192.168.202.140
Configurações do SQL Server no Linux
- Nome: rd
- Endereço IP: 192.168.202.137
Preparando a máquina de domínio
Precisamos realizar ajustes no servidor de domínio adicionando informações no DNS para que ele consiga identificar o servidor do linux pelo nome. Para isto, devemos acessar o DNS Manager e adicionar uma entrada na “Forward Lookup Zone” para o servidor do linux.
Com este registro no DNS garantimos que o endereço rd.estudo.net chegará no servidor correto. Lembrando que o registro no DNS deve ser do tipo forwarding host (A).
Adicionando host linux no seu domínio do AD
O primeiro passo é configurar a interface de rede para adicionar o endereço do servidor DNS.
No cenário de teste, editamos o arquivo de configuração da interface de rede “ens33” adicionando as entradas PEERDNS, DNS1 e DOMAIN. O arquivo de configuração da interface é localizado no diretório “/etc/sysconfig/network-scripts/ifcfg-ens33“.
(...)
PEERDNS=no
DNS1=192.168.202.140
DOMAIN="estudo.net net"
Após ajustar a configuração de DNS é preciso reiniciar as interfaces de rede por meio do comando “systemctl restart network”. Se as configurações foram corretamente informadas, o arquivo /etc/resolv.conf deve conter as entradas conforme abaixo:
# Generated by NetworkManager
search estudo.net net
nameserver 192.168.202.140
O próximo passo é adicionar o host ao domínio.
Utilizando o pacote SSSD para adicionar o host ao domínio
Este método faz uso dos pacotes sssd e o realmd para adicionar o host linux ao domínio. Nossos testes demonstram como realizar este procedimento em um ambiente RHEL (Redhat, CentOS, Oracle Linux, …).
O primeiro passo é instalar os pacotes realmd e Kerberos client no host do SQL Server.
sudo yum install realmd krb5-workstation
Se a instalação do Kerberos solicitar o nome do domínio, devemos preencher com o nome do domínio em caixa alta, por exemplo ESTUDO.NET. A instalação do kerberos ajusta alguns arquivos de configuração /etc/krb5.keytab, /etc/sssd/sssd.conf e /etc/krb5.conf.
Outro passo importante é renomear o nome do host do SQL Server no linux para que ela tenha o FQDN: “sudo hostname <nome antigo>.estudo.net“
sudo hostname rd.estudo.net
Após renomear o host, podemos adicioná-lo ao domínio.
sudo realm join estudo.net -U 'user@ESTUDO.NET' -v
O user deve ser uma conta com privilégios elevados no AD que permita a criação de objetos no domínio. No nosso cenário de teste utilizei a própria “administrator”. Desta forma, o comando executado foi “sudo realm join estudo.net -U ‘administrator@ESTUDO.NET’ -v“. O retorno esperado é: Successfully enrolled machine in realm.
Podemos validar se está tudo correto utilizando o comando “id”. Por exemplo:
id administrator@ESTUDO.NET
uid=122200500(administrator@estudo.net) gid=122200513(domain users@estudo.net) groups=122200513(domain users@estudo.net),122200520(group policy creator owners@estudo.net),122200512(domain admins@estudo.net),122200572(denied rodc password replication group@estudo.net),122200519(enterprise admins@estudo.net),122200518(schema admins@estudo.net)
Configurando a integração com o AD
O primeiro passo para configuração da integração com o AD é instalar o adutil.
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum remove adutil
sudo ACCEPT_EULA=Y yum install -y adutil-preview
Importante ressaltar que a ferramenta ainda está como preview e alguns erros podem ocorrer.
Após a instalação, nós devemos obter um ticket Kerberor TGT (ticket-granting ticket). Para isto, utilizaremos o comando kinit e uma conta com permissão elevada no ad para criação de objetos. No nosso exemplo utilizaremos a “administrator”.
kinit administrator@ESTUDO.NET
Observação: o ambiente bash do linux é case sensitive. Recomendo utilizar o nome do domínio sempre em maiúsculo.
Após autenticar podemos dar seguimento com as atividades de criação de conta de domínio, registros de spn e configuração do keytab file.
Criando conta de usuário para o SQL Server
Para a criação da conta de domínio podemos utilizar o comando a seguir:
adutil user create --name mssql -distname CN=mssql,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
Neste caso será criado um user com nome mssql e password P@ssw0rd. A senha nunca expirará.
Obs.: Se ocorrer erro para criar o usuário utilizando o adutil, basta criar um usuário simples no AD. Lembrar de marcar a opção de nunca expirar a senha.
Registrando os spn
No comando passamos a conta de usuário, o serviço do SQL Server e o nome do host com a porta configurada.
adutil spn addauto -n mssql MSSQLSvc -H rd.estudo.net -p 1433
Caso não consiga registrar automaticamente as SPN. Com uma conta de permissão elevada no AD. Crie manualmente as spn. Seguem exemplos:
setspn -A MSSQLSvc/rd.estudo.net:1433 mssql
setspn -A MSSQLSvc/rd:1433 mssql
Configurando os arquivo de keytab
A última etapa é configurar o keytab file. Arquivo utilizado para conexões utilizando Kerberos.
adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H rd --password 'P@ssw0rd' -s MSSQLSvc
Criadas as entradas no mssql.keytab, devemos ajustar o owner e os acessos ao arquivo para o SQL Server.
chown mssql. /var/opt/mssql/secrets/mssql.keytab
chmod 440 /var/opt/mssql/secrets/mssql.keytab
Agora devemos configurar o SQL Server para fazer uso das keytab.
/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount mssql
Após todas as configurações basta reiniciar o serviço do SQL Server (sudo systemctl restart mssql-server) e testar a autenticação integrada.
O acesso com o SQL Server deve ser feito por meio do FQDN, caso tente conectar utilizando o endereço IP ocorrerá erro de Untrusted domain.
Muito massa, pessoal! Já usei, porém agora eu fiz aplicando as práticas indicadas por vocês. Obrigado.