Tutorial: Usar autenticação do Active Directory com o SQL Server em Linux

Aplica-se a: SQL Server no Linux

Este tutorial explica como configurar o SQL Server no Linux para dar suporte à autenticação do Active Directory, também conhecida como autenticação integrada. Para obter uma visão geral, confira Autenticação do Active Directory para SQL Server em Linux.

Este tutorial é composto pelas seguintes etapas:

  • Conecte o host do SQL Server a um domínio do Active Directory
  • Crie um usuário do Active Directory para o SQL Server e defina um SPN
  • Configurar keytab do serviço SQL Server
  • Proteger o arquivo keytab
  • Configurar o SQL Server para usar o arquivo keytab para autenticação Kerberos
  • Criar logons baseados no Active Directory no 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ê precisa:

Note

A partir do SQL Server 2025 (17.x), não há suporte para SLES (SUSE Linux Enterprise Server).

Ingressar host do SQL Server em domínio do Active Directory

Conecte seu host do SQL Server Linux a um controlador de domínio do Active Directory. Para obter informações sobre como ingressar em um domínio do Active Directory, consulte Ingressar o SQL Server em um host Linux em um domínio do Active Directory.

Criar usuário do Active Directory para SQL Server e definir SPN

Note

As seguintes etapas usam seu nome de domínio totalmente qualificado (FQDN). Caso esteja no Azure, você deverá criar um FQDN antes de continuar.

  1. No controlador de domínio, execute o comando do PowerShell New-ADUser para criar um usuário do Active Directory com uma senha que nunca expira. O exemplo a seguir dá à conta o nome sqlsvc, mas o nome dela poderá ser qualquer coisa que você quiser. Você deverá inserir uma nova senha para a conta.

    Import-Module ActiveDirectory
    
    New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
    

    É uma melhor prática de segurança ter uma conta do Active Directory dedicada para o SQL Server, para que as credenciais de instância do SQL Server não sejam compartilhadas com outros serviços usando a mesma conta. No entanto, opcionalmente, você poderá reutilizar uma conta existente do Active Directory se souber a senha da conta (necessária para gerar um arquivo keytab na próxima etapa). Além disso, a conta deve ser habilitada para ser compatível com a criptografia AES Kerberos de 128 bits e 256 bits (atributo msDS-SupportedEncryptionTypes) na conta do usuário. Para validar se a conta está habilitada para criptografia AES, localize-a no utilitário Usuários e Computadores do Active Directory e selecione Propriedades. Localize a guia Contas nas Propriedades e verifique se as duas caixas de seleção a seguir estão selecionadas.

    1. Esta conta oferece suporte à criptografia Kerberos AES de 128 bits
    2. Esta conta dá suporte à criptografia Kerberos AES de 256 bits
  2. Defina o nome principal de serviço (SPN) para esta conta usando a ferramenta setspn.exe. O SPN deve ser formatado exatamente como especificado no exemplo a seguir. É possível localizar o nome de domínio totalmente qualificado do computador host do SQL Server executando hostname --all-fqdns no host do SQL Server. A porta TCP deve ser 1433, a menos que você tenha configurado o SQL Server para usar um número de porta diferente.

    setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc
    setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvc
    

    Note

    Se você receber um erro, Insufficient access rights, verifique com seu administrador de domínio se você tem permissões suficientes para definir um SPN nessa conta. A conta usada para registrar um SPN precisará das permissões Write servicePrincipalName. Para obter mais informações, veja Registrar um Nome Principal de Serviço para conexões de Kerberos.

    Se você alterar a porta TCP no futuro, deverá executar o comando setspn novamente com o novo número da porta. Você também precisa adicionar o novo SPN ao keytab do serviço SQL Server seguindo as etapas na próxima seção.

Para obter mais informações, veja Registrar um Nome Principal de Serviço para conexões de Kerberos.

Configurar keytab do serviço SQL Server

Configurar a autenticação do Active Directory para o SQL Server no Linux requer uma conta de usuário do Active Directory e o SPN criado na seção anterior.

Importante

Se a senha da conta do Active Directory for alterada ou a senha da conta à qual os SPNs são atribuídos for alterada, você precisará atualizar o keytab com a nova senha e o KVNO (número de versão da chave). Alguns serviços também podem girar as senhas automaticamente. Examine as políticas de rotação de senha das contas em questão e alinhe-as com as atividades de manutenção agendada para evitar tempo de inatividade inesperado.

Entradas keytab do SPN

  1. Verifique o Número da Versão da Chave (KVNO) da conta do Active Directory criada na seção anterior. Normalmente, é 2, mas poderia ser outro inteiro se você alterasse a senha da conta várias vezes. No computador host do SQL Server, execute os seguintes comandos:

    • Os exemplos abaixo pressupõem que o user esteja no domínio @CONTOSO.COM. Modifique o usuário e o nome de domínio para seu nome de usuário e seu domínio.
    kinit user@CONTOSO.COM
    kvno user@CONTOSO.COM
    kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
    

    Note

    Os SPNs poderão levar vários minutos para serem propagados por meio de seu domínio, principalmente se ele for grande. Se você receber o erro, kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM, aguarde alguns minutos e tente novamente. Os comandos anteriores só funcionarão se o servidor tiver sido ingressado em um domínio do Active Directory, que foi abordado em uma seção anterior.

  2. Usando ktpass, adicione entradas no keytab para cada SPN usando os seguintes comandos em um Prompt de Comando do Windows:

    • <DomainName>\<UserName> – Conta de usuário do Active Directory
    • @CONTOSO.COM - use o nome do seu domínio
    • /kvno <#> - Substitua <#> pelo KVNO obtido em uma etapa anterior
    • <password> - Sua senha deve seguir a política de senha padrão do SQL Server. Por padrão, a senha precisa ter pelo menos oito caracteres e conter caracteres de três dos seguintes quatro conjuntos: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As senhas podem ter até 128 caracteres. Use senhas que sejam tão longas e complexas quanto possível.
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    

    Os comandos anteriores permitem as cifras de criptografia AES e RC4 para autenticação do Active Directory. O RC4 é uma codificação de criptografia mais antiga e, se um nível mais alto de segurança for necessário, você poderá optar por criar as entradas keytab apenas com a codificação de criptografia AES.

    Note

    As duas UserName últimas entradas devem estar em minúsculas, ou a autenticação pode falhar.

  3. Depois de executar os comandos anteriores, você deve ter um arquivo keytab chamado mssql.keytab. Copie o arquivo para o computador do SQL Server na pasta /var/opt/mssql/secrets.

  4. Proteja o arquivo keytab.

    Qualquer pessoa com acesso ao esse arquivo keytab pode representar o SQL Server no domínio; portanto, restrinja o acesso ao arquivo de tal forma que apenas a conta mssql tenha acesso de leitura:

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
    
  5. A opção de configuração a seguir precisa ser definida com a mssql-conf ferramenta para especificar a conta a ser usada ao acessar o arquivo keytab.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    Note

    Inclua apenas o nome de usuário e não domainname\username ou username@domain. O SQL Server adiciona internamente o nome de domínio, conforme necessário, junto com esse nome de usuário, quando usado.

  6. Use as etapas a seguir para configurar o SQL Server para ser iniciado usando o arquivo keytab para a autenticação Kerberos.

    sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    sudo systemctl restart mssql-server
    

    Opcionalmente, você pode desabilitar conexões UDP ao controlador de domínio para melhorar o desempenho. Em muitos casos, as conexões UDP falham consistentemente ao conectar-se a um controlador de domínio; portanto, você pode definir as opções de configuração no /etc/krb5.conf para ignorar chamadas UDP. Edite /etc/krb5.conf e defina as seguintes opções:

    [libdefaults]
    udp_preference_limit = 0
    

Neste ponto, você está pronto para usar logons baseados no Active Directory no SQL Server.

Criar logons baseados no Active Directory no Transact-SQL

  1. Conecte-se ao SQL Server e crie um logon baseado no Active Directory:

    CREATE LOGIN [CONTOSO\user]
        FROM WINDOWS;
    
  2. Verifique se o logon agora está listado na exibição do catálogo do sistema sys.server_principals:

    SELECT name
    FROM sys.server_principals;
    

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

Entre em um computador cliente usando suas credenciais de domínio. Agora você pode se conectar ao SQL Server sem reinserir sua senha usando a Autenticação do Active Directory. Se você criar um logon para um grupo do Active Directory, qualquer usuário do Active Directory que seja membro desse grupo poderá se conectar da mesma maneira.

O parâmetro de cadeia de conexão específico para os clientes usarem a autenticação do Active Directory depende de qual driver você está usando. Considere os exemplos nas seções a seguir.

sqlcmd em um cliente Linux ingressado em domínio

Entre em um cliente Linux ingressado em domínio usando SSH e suas credenciais de domínio:

ssh -l user@contoso.com client.contoso.com

Verifique se você instalou o pacote mssql-tools e conecte-se usando sqlcmd sem especificar credenciais:

sqlcmd -S mssql-host.contoso.com

Diferente do SQL Server no Windows, a autenticação Kerberos funciona para conexões locais ao SQL Server em Linux. No entanto, você ainda precisa fornecer o FQDN do host do SQL Server. A autenticação do Active Directory não funcionará se você tentar conectar a ., localhost, ou 127.0.0.1.

SSMS em um cliente Windows ingressado em domínio

Entre em um cliente Windows ingressado em domínio usando suas credenciais de domínio. Verifique se o SQL Server Management Studio está instalado e conecte-se à sua instância do SQL Server ( por exemplo, mssql-host.contoso.com) especificando a Autenticação do Windows na caixa de diálogo Conectar ao servidor.

Autenticação do Active Directory usando outros drivers do cliente

A tabela a seguir descreve recomendações para outros drivers do cliente:

Driver do cliente Recommendation
JDBC Use a Autenticação Integrada Kerberos para conectar o SQL Server.
ODBC Use a Autenticação Integrada.
ADO.NET Sintaxe de Cadeia de Conexão.

Opções de configuração adicionais

Se você está usando utilitários de terceiros como PBIS, VAS ou Centrify para unir o host Linux a um domínio do Active Directory e quiser forçar o SQL Server a usar diretamente a biblioteca OpenLDAP, pode configurar a disablesssd opção da mssql-conf seguinte forma:

sudo mssql-conf set network.disablesssd true
sudo systemctl restart mssql-server

Note

Existem utilitários como o Realmd que configuram o SSSD, enquanto outras ferramentas como PBIS, VAS e Centrify não configuram o SSSD. Se a ferramenta usada para entrar no domínio do Active Directory não configurar o SSSD, você deve configurar a disablesssd opção para true. Embora não seja obrigatório porque o SQL Server tenta usar SSSD para o Active Directory antes de recorrer ao mecanismo OpenLDAP, configurar essa opção permite que o SQL Server faça chamadas OpenLDAP diretamente e evite o SSSD.

Se o controlador de domínio der suporte ao LDAPS, será possível forçar todas as conexões do SQL Server com os controladores de domínio para ocorrerem pelo LDAPS. Para verificar se seu cliente pode contatar o controlador de domínio pelo LDAPS, execute o seguinte comando Bash, ldapsearch -H ldaps://contoso.com:3269. Para configurar o SQL Server para usar apenas LDAPS, execute o seguinte:

sudo mssql-conf set network.forcesecureldap true
sudo systemctl restart mssql-server

O SQL Server usa LDAPS sobre SSSD se o host entrou no domínio do Active Directory usando SSSD e disablesssd não estiver configurado para true. Se ambos disablesssd e forcesecureldap estiverem definidos para true, o SQL Server usa LDAPS em vez do OpenLDAP.

SQL Server 2017 CU 14 e versões posteriores

A partir do SQL Server 2017 (14.x) CU 14, se o SQL Server foi associado a um controlador de domínio do Active Directory usando provedores de terceiros e está configurado para usar chamadas OpenLDAP para pesquisa geral no Active Directory definindo disablesssd como true, você também pode usar a opção enablekdcfromkrb5conf para forçar o SQL Server a usar a biblioteca krb5 para a pesquisa do KDC em vez da pesquisa reversa de DNS para o servidor KDC.

Isso pode ser útil quando você quiser configurar manualmente os controladores de domínio com os quais o SQL Server tenta se comunicar e usar o mecanismo da biblioteca OpenLDAP com a lista KDC em krb5.conf.

Primeiro, defina disablesssd e enablekdcfromkrb5conf como true e, em seguida, reinicie o SQL Server:

sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
sudo systemctl restart mssql-server

Em seguida, configure a lista KDC em /etc/krb5.conf da seguinte maneira:

[realms]
CONTOSO.COM = {
  kdc = dcWithGC1.contoso.com
  kdc = dcWithGC2.contoso.com
}

Embora não seja recomendado, é possível usar utilitários, como realmd, que configuram o SSSD ao ingressar o host Linux no domínio e, ao mesmo tempo, configurar o disablesssd como true para que o SQL Server use chamadas OpenLDAP em vez do SSSD para chamadas relacionadas ao Active Directory.

Note

Não há suporte para o logon do SQL Server com um FQDN (por exemplo, CONTOSO.COM\Username). Use o formato CONTOSO\Username.

Não há suporte para logons do SQL Server por meio de grupos de Domínio Local. Em vez disso, use grupos de Domínio de Segurança Global.

Contribua com a documentação do SQL

Você sabia que pode editar o conteúdo do SQL por conta própria? Ao fazer isso, além de melhorar nossa documentação, você também será creditado como um colaborador da página.

Para obter mais informações, consulte a documentação Edit Microsoft Learn.