Tutorial: usar o adutil para configurar a autenticação do Active Directory com o SQL Server em Linux

Aplica-se a:SQL Server – Linux

Este tutorial explica como configurar a autenticação do Active Directory do Windows com o SQL Server em Linux usando o adutil. Para conhecer outro método de configuração da autenticação do Active Directory usando o ktpass, confira o Tutorial: Usar a autenticação do Active Directory com o SQL Server em Linux.

Este tutorial é composto pelas seguintes etapas:

  • Instalar o adutil
  • Ingressar o computador Linux no domínio do Active Directory
  • Criar um usuário do Active Directory para o SQL Server e definir o SPN (nome da entidade de serviço) usando o adutil
  • Criar o arquivo keytab do serviço SQL Server (keytab)
  • Configurar o SQL Server para usar o arquivo keytab
  • Criar logons do SQL Server baseados no Active Directory usando Transact-SQL
  • Conectar-se ao SQL Server usando a autenticação do Active Directory

Pré-requisitos

Antes de configurar a autenticação do Active Directory, você precisará:

  • um controlador de domínio do Windows executando o Active Directory Domain Services em sua rede.
  • A ferramenta adutil instalada em um computador host conectado ao domínio.

Preparação do computador de domínio

Verifique se há uma entrada de host de encaminhamento (A) adicionada no Active Directory para o endereço IP do host do Linux. Neste tutorial, o endereço IP do computador host sql1 é 10.0.0.10. Adicionamos a entrada de host de encaminhamento no Active Directory no exemplo a seguir. A entrada garante que, quando os usuários se conectarem a sql1.contoso.com, o host correto será atingido.

add host record

Para este tutorial, estamos usando um ambiente no Azure com três VMs (máquinas virtuais). Uma VM é um computador Windows Server chamado adVM.contoso.com, em execução como um DC (controlador de domínio) com o nome de domínio contoso.com. A segunda VM é um computador cliente, chamado winbox, que executa o Windows 10, que tem o SSMS (SQL Server Management Studio) instalado. O terceiro computador é um computador Ubuntu 18.04 LTS chamado sql1, que hospeda o SQL Server.

Ingressar o computador host Linux no seu domínio do Active Directory

Para ingressar sql1 no domínio do Active Directory, confira Ingressar o SQL Server em um host Linux em um domínio do Active Directory.

Instalar o adutil

Para instalar o adutil, siga as etapas explicadas no artigo Introdução ao adutil – utilitário Active Directory no computador host que você adicionou ao domínio na etapa anterior.

Use o adutil para criar um usuário do Active Directory para o SQL Server e definir o SPN (nome da entidade de serviço)

  1. Obtenha ou renove o TGT (tíquete de concessão de tíquete) do Kerberos usando o comando kinit. Você deve usar uma conta com privilégios para o comando kinit, e o computador host já deve fazer parte do domínio. A conta precisa ter permissão para se conectar ao domínio e criar contas e SPNs no domínio.

    Neste script de exemplo, um usuário com privilégios chamado privilegeduser@CONTOSO.COM já foi criado no controlador de domínio.

    kinit privilegeduser@CONTOSO.COM
    
  2. Usando o adutil, crie o novo usuário que você usará como a conta do Active Directory com privilégios pelo SQL Server.

    As senhas podem ser especificadas de três maneiras diferentes. Se você usar mais de um desses métodos, eles terão precedência na seguinte ordem:

    • Usando o sinalizador de senha: --password <password>
    • Em uma variável de ambiente: ADUTIL_ACCOUNT_PWD
    • Entrada interativa em um prompt de linha de comando

    A variável de ambiente ou os métodos de entrada interativos são mais seguros do que o sinalizador de senha.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
    

    Você pode especificar o nome da conta usando o nome diferenciado (--distname), como mostrado anteriormente, ou pode usar o nome da UO (unidade organizacional). O nome da UO (--ou) tem precedência sobre o nome diferenciado, caso você especifique ambos. Você pode executar o comando abaixo para obter mais detalhes:

    adutil user create --help
    
  3. Registre os SPNs para a entidade de segurança criada anteriormente. Você deve usar o FQDN (nome de domínio totalmente qualificado) do computador. Neste tutorial, estamos usando a porta padrão do SQL Server, 1433. Seu número da porta pode ser diferente.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto cria os SPNs automaticamente, contanto que haja privilégios suficientes para a conta kinit.
    • -n: o nome da conta para atribuir os SPNs.
    • -s: o nome do serviço a ser usado para gerar SPNs. Nesse caso, é para o serviço SQL Server e, portanto, o nome do serviço é MSSQLSvc.
    • -H: o nome do host a ser usado para gerar SPNs. Se não for especificado, o FQDN do host local será usado. Nesse caso, o nome do host é sql1 e o FQDN é sql1.contoso.com.
    • -p: a porta a ser usada para gerar SPNs. Se não for especificado, os SPNs serão gerados sem uma porta. As conexões do SQL só funcionarão nesse caso quando o SQL Server estiver escutando a porta padrão, 1433.

Criar o arquivo keytab do serviço SQL Server usando mssql-conf

Você pode instalar o adutil e integrá-lo ao mssql-conf para criar e configurar o keytab usando o mssql-conf diretamente. Esse é o método preferido para criar um arquivo keytab de serviço SQL Server. Caso contrário, você poderá criar o arquivo keytab do serviço SQL Server manualmente.

Pré-requisitos

  1. Verifique se o arquivo /var/opt/mssql/mssql.conf pertence a mssql e não a root. Se não for o caso, você deverá executar os comandos mssql-conf usando sudo.

  2. Em um controlador de domínio, nas configurações do Active Directory para a conta network.privilegedadaccount (nestes exemplos, sqluser@CONTOSO.COM), habilite as seguintes opções na guia Conta, na seção Opções da conta:

    • Esta conta oferece suporte à criptografia Kerberos AES de 128 bits
    • Esta conta dá suporte à criptografia Kerberos AES de 256 bits

Criar o arquivo de keytab

Depois de criar o usuário e os SPNs, você poderá criar o keytab usando as etapas a seguir.

  1. Alterne para o usuário mssql:

    su mssql
    
  2. Entre como o usuário do Active Directory usando o comando kinit:

    kinit privilegeduser@CONTOSO.COM
    
  3. Crie o arquivo keytab:

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    Você será solicitado a reiniciar o serviço SQL Server para adotar a nova configuração do Active Directory, o que poderá ser feito na próxima seção.

  4. Confirme se o keytab foi criado com as entradas corretas:

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    Você deverá ver uma saída semelhante a este exemplo:

    keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

    Observação

    Se o arquivo /var/opt/mssql/mssql.conf não pertencer a mssql, você deverá configurar mssql-conf para definir os valores network.kerberoskeytabfile e network.privilegedadaccount de acordo com as etapas anteriores. Digite a senha quando solicitado.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Valide sua configuração para garantir que a autenticação do Active Directory funcione sem problemas.

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    Você deverá ver uma saída semelhante ao seguinte exemplo:

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

Criar o arquivo keytab do serviço SQL Server manualmente

Se você instalou o adutil e o integrou ao mssql-conf, pule para Criar o arquivo keytab do serviço SQL Server usando mssql-conf.

  1. Crie o arquivo keytab que contém entradas para cada um dos quatro SPNs criados anteriormente, bem como um para o usuário.

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
    

    As opções de linha de comando possíveis são:

    • -k: o caminho no qual o arquivo mssql.keytab foi criado. No exemplo acima, o diretório /var/opt/mssql/secrets/ já deve existir no host.
    • -p: a porta a ser usada para gerar SPNs. Se não for especificado, os SPNs serão gerados sem uma porta.
    • -H: o nome do host a ser usado para gerar SPNs. Se não for especificado, o FQDN do host local será usado. Nesse caso, o nome do host é sql1 e o FQDN é sql1.contoso.com.
    • -s: o nome do serviço a ser usado para gerar SPNs. Para este exemplo, o nome do serviço SQL Server é MSSQLSvc.
    • --password: a senha da conta de usuário privilegiada do Active Directory que foi criada anteriormente.
    • -e ou --enctype: Tipos de criptografia para a entrada de keytab. Use uma lista de valores separados por vírgulas. Se não for especificado, um prompt interativo será apresentado.

    Você pode escolher mais de um tipo de criptografia, desde que o host e o domínio deem suporte ao tipo de criptografia. Neste exemplo, você pode escolher aes256-cts-hmac-sha1-96 e aes128-cts-hmac-sha1-96. No entanto, você deve evitar arcfour-hmac em um ambiente de produção porque ele tem criptografia fraca.

    Se você quiser escolher o tipo de criptografia sem solicitação, poderá especificar sua escolha de tipo de criptografia com o argumento -e no comando acima. Para obter mais ajuda com as opções adutil keytab, execute este comando:

    adutil keytab createauto --help
    
  2. Adicione uma entrada no keytab para o nome da entidade de segurança e sua senha que o SQL Server usa para se conectar ao Active Directory:

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: caminho em que você deseja criar o arquivo mssql.keytab.
    • -p: entidade de segurança a ser adicionada ao keytab.

    O adutil keytab [ create | autocreate ] não substitui os arquivos anteriores, ele apenas será acrescentado ao arquivo se ele já estiver presente.

  3. Verifique se o keytab criado pertence ao usuário mssql e se somente o usuário mssql tem acesso de leitura/gravação ao arquivo. Você pode executar os comandos chown e chmod da seguinte maneira:

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

Configurar o SQL Server para usar o keytab

Execute os comandos abaixo para configurar o SQL Server para usar o keytab criado na etapa anterior e defina a conta do Active Directory com privilégio como o usuário criado anteriormente. Em nosso exemplo, o nome de usuário é sqluser.

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

Reiniciar o SQL Server

Execute o comando abaixo para reiniciar o serviço SQL Server:

sudo systemctl restart mssql-server

Criar logons do SQL Server baseados no Active Directory no Transact-SQL

Conecte-se ao SQL Server e execute os comandos a seguir para criar o logon e confirmar se ele está listado.

CREATE LOGIN [contoso\privilegeduser] FROM WINDOWS;
SELECT name FROM sys.server_principals;

Conectar-se ao SQL Server usando a autenticação do Active Directory

Para se conectar usando o SSMS ou o Azure Data Studio, faça logon no SQL Server com suas credenciais do Windows.

Você também pode usar uma ferramenta como sqlcmd para se conectar ao SQL Server usando a Autenticação do Windows.

sqlcmd -E -S 'sql1.contoso.com'