Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server em Linux
Este tutorial explica como configurar o SQL Server no Linux para dar suporte à autenticação do Ative Directory, também conhecida como autenticação integrada. Para obter uma visão geral, consulte Autenticação do Active Directory para SQL Server no Linux.
Este tutorial consiste nas seguintes tarefas:
- Junte o host do SQL Server a um domínio do Active Directory
- Crie um utilizador do Active Directory para o SQL Server e defina um SPN
- Configurar o keytab de serviço do SQL Server
- Proteja o arquivo keytab
- Configurar o SQL Server para usar o arquivo keytab para autenticação Kerberos
- Criar logins baseados no Ative Directory no Transact-SQL
- Conectar-se ao SQL Server usando a autenticação do Ative Directory
Pré-requisitos
Antes de configurar a autenticação do Active Directory, precisa:
- Configure um controlador de domínio Active Directory (Windows) na sua rede
- Instalar o SQL Server
Note
A partir do SQL Server 2025 (17.x), o SUSE Linux Enterprise Server (SLES) não é suportado.
Associar o host do SQL Server ao domínio do Ative Directory
Ligue o seu host SQL Server Linux a um controlador de domínio do Active Directory. Para informações sobre como aderir a um domínio Active Directory, veja Join SQL Server num host Linux para um domínio Active Directory.
Criar usuário do Ative Directory para SQL Server e definir SPN
Note
As etapas a seguir usam o seu nome de domínio totalmente qualificado (FQDN). Se você estiver no Azure, deverá criar um FQDN antes de continuar.
No controlador de domínio, execute o comando New-ADUser PowerShell para criar um novo usuário do Ative Directory com uma senha que nunca expira. O exemplo a seguir nomeia a conta
sqlsvc, mas o nome da conta pode ser o que você quiser. Ser-lhe-á pedido que introduza uma nova palavra-passe para a conta.Import-Module ActiveDirectory New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $trueÉ uma prática recomendada de segurança ter uma conta dedicada do Ative Directory para o SQL Server, para que as credenciais da instância do SQL Server não sejam compartilhadas com outros serviços usando a mesma conta. No entanto, você pode, opcionalmente, reutilizar uma conta existente do Ative Directory se souber a senha da conta (que é necessária para gerar um arquivo keytab na próxima etapa). Além disso, a conta deve ser habilitada para oferecer suporte à criptografia AES Kerberos de 128 bits e 256 bits (atributo
msDS-SupportedEncryptionTypes) na conta de usuário. Para validar que a conta está habilitada para criptografia AES, localize a conta no utilitário Active Directory de Usuários e Computadores e selecione Propriedades. Localize o separador Contasem Propriedades e verifique se as duas caixas de seleção a seguir estão marcadas.- Esta conta suporta criptografia Kerberos AES de 128 bits
- Esta conta suporta criptografia Kerberos AES de 256 bits
Defina o nome principal do serviço (SPN) desta conta usando a ferramenta setspn.exe . O SPN deve ser formatado exatamente como especificado no exemplo a seguir. Você pode encontrar o nome de domínio totalmente qualificado da máquina que hospeda o SQL Server executando
hostname --all-fqdnsno 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> sqlsvcNote
Se receber um erro,
Insufficient access rights, verifique com o administrador do domínio se tem permissões suficientes para definir um SPN nesta conta. A conta usada para registrar um SPN precisará dasWrite servicePrincipalNamepermissões. Para obter mais informações, consulte Registar um nome de entidade de serviço para conexões 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 à keytab do SQL Server, seguindo as etapas na próxima seção.
Para obter mais informações, consulte Registar um nome de entidade de serviço para conexões Kerberos.
Configurar o keytab de serviço do SQL Server
Configurar a autenticação do Ative Directory para SQL Server no Linux requer uma conta de usuário do Ative Directory e o SPN criado na seção anterior.
Importante
Se a senha da conta do Ative Directory for alterada ou a senha da conta à qual os SPNs estão atribuídos for alterada, você deverá atualizar o keytab com a nova senha e o número da versão da chave (KVNO). Alguns serviços também podem alternar as senhas automaticamente. Revise todas as políticas de rotação de senha para as contas em questão e alinhe-as com as atividades de manutenção programadas para evitar tempo de inatividade inesperado.
Entradas de keytab do SPN
Verifique o Número de Versão da Chave (KVNO) da conta Active Directory criada na secção anterior. Geralmente é 2, mas pode ser outro inteiro se você alterou a senha da conta várias vezes. Na máquina host do SQL Server, execute os seguintes comandos:
- Os exemplos abaixo assumem que o
userestá no domínio@CONTOSO.COM. Modifique o usuário e o nome de domínio para seu nome de usuário e domínio.
kinit user@CONTOSO.COM kvno user@CONTOSO.COM kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMNote
Os SPNs podem levar vários minutos para se propagar pelo seu domínio, especialmente se o domínio for grande. Se 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ó funcionam se o servidor tiver sido associado a um domínio do Ative Directory, que foi abordado em uma seção anterior.- Os exemplos abaixo assumem que o
Usando ktpass, adicione entradas no keytab para cada SPN utilizando os seguintes comandos na Linha de Comandos do Windows:
-
<DomainName>\<UserName>- Conta de usuário do Ative Directory -
@CONTOSO.COM- Use seu nome de domínio -
/kvno <#>- Substitua<#>pelo KVNO obtido numa etapa anterior -
<password>- Sua senha deve seguir a política de senha padrão do SQL Server. Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas 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 cifras de criptografia AES e RC4 para autenticação do Ative Directory. RC4 é uma cifra de encriptação mais antiga e, se for necessário um maior grau de segurança, pode optar por criar as entradas keytab apenas com a cifra de encriptação AES.
Note
As duas
UserNameúltimas entradas devem estar em minúsculas, caso contrário a autenticação pode falhar.-
Depois de executar os comandos anteriores, você deve ter um arquivo keytab chamado
mssql.keytab. Copie o arquivo para a máquina do SQL Server na pasta/var/opt/mssql/secrets.Proteja o arquivo keytab.
Qualquer pessoa com acesso a esse arquivo keytab pode representar o SQL Server no domínio, portanto, certifique-se de restringir o acesso ao arquivo de modo 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.keytabA seguinte opção de configuração deve ser definida com a
mssql-confferramenta para especificar a conta a usar ao aceder ao ficheiro keytab.sudo mssql-conf set network.privilegedadaccount <username>Note
Inclua apenas o nome de usuário e não o nome de domínio\nome de usuário ou username@domain. O SQL Server adiciona internamente o nome de domínio conforme necessário, juntamente com esse nome de usuário quando usado.
Use as etapas a seguir para configurar o SQL Server para começar a usar o arquivo keytab para autenticação Kerberos.
sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab sudo systemctl restart mssql-serverOpcionalmente, você pode desabilitar conexões UDP com o controlador de domínio para melhorar o desempenho. Em muitos casos, as conexões UDP falham consistentemente ao se conectar a um controlador de domínio, para que você possa definir opções de configuração em
/etc/krb5.confignorar chamadas UDP. Edite/etc/krb5.confe defina as seguintes opções:[libdefaults] udp_preference_limit = 0
Neste ponto, você está pronto para usar logons baseados no Ative Directory no SQL Server.
Criar logins baseados no Ative Directory no Transact-SQL
Conecte-se ao SQL Server e crie um novo logon baseado no Ative Directory:
CREATE LOGIN [CONTOSO\user] FROM WINDOWS;Verifique se o login 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 Ative Directory
Entre em uma máquina cliente usando suas credenciais de domínio. Agora você pode se conectar ao SQL Server sem reinserir sua senha usando a autenticação do Ative Directory. Se você criar um logon para um grupo do Ative Directory, qualquer usuário do Ative 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 Ative Directory depende do driver que você está usando. Considere os exemplos nas seções a seguir.
sqlcmd em um cliente Linux associado a um domínio
Entre em um cliente Linux associado a um domínio usando ssh e suas credenciais de domínio:
ssh -l user@contoso.com client.contoso.com
Certifique-se de que instalou o pacote mssql-tools e então liga-te sem indicar quaisquer credenciais:
sqlcmd -S mssql-host.contoso.com
Ao contrário do SQL Server no Windows, a autenticação Kerberos funciona para ligações locais ao SQL Server em Linux. No entanto, continua a ser necessário fornecer o FQDN do anfitrião do SQL Server. A autenticação do Active Directory não funcionará se tentar ligar a ., localhost, ou 127.0.0.1.
SSMS em um cliente Windows associado a um domínio
Entre em um cliente Windows associado a um domínio usando suas credenciais de domínio. Verifique se o SQL Server Management Studio está instalado e, em seguida, conecte-se à sua instância do SQL Server (por exemplo, mssql-host.contoso.com) especificando Autenticação do Windows na caixa de diálogo Conectar ao Servidor.
Autenticação do Ative Directory usando outros drivers de cliente
A tabela a seguir descreve recomendações para outros drivers de 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 da cadeia de conexão. |
Opções de configuração adicionais
Se estiver a usar utilitários de terceiros como PBIS, VAS ou Centrify para juntar 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 ligar ao domínio do Active Directory não configurar SSSD, 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 esta opção permite ao SQL Server fazer chamadas OpenLDAP diretamente e contornar o SSSD.
Se o controlador de domínio oferecer suporte a LDAPS, você poderá forçar todas as conexões do SQL Server com os controladores de domínio a serem feitas por LDAPS. Para verificar se o cliente pode entrar em contato com o controlador de domínio sobre LDAPS, execute o seguinte comando bash, ldapsearch -H ldaps://contoso.com:3269. Para definir 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 em vez de SSSD se o host se juntou ao domínio Active Directory usando SSSD e disablesssd não estiver definido para true. Se ambos disablesssd e forcesecureldap estiverem definidos para true, o SQL Server usa LDAPS em vez de 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 através de fornecedores de terceiros e estiver configurado para utilizar chamadas OpenLDAP para a pesquisa geral no Active Directory, ao definir disablesssd como true, também pode utilizar a opção enablekdcfromkrb5conf para forçar o SQL Server a utilizar a biblioteca krb5 para a pesquisa do KDC em vez da pesquisa DNS inversa do servidor KDC.
Isto pode ser útil quando quiser configurar manualmente os controladores de domínio com os quais o SQL Server tenta 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 de /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 unir o host Linux ao domínio, enquanto configuram disablesssd como true para que o SQL Server use chamadas OpenLDAP em vez de SSSD para chamadas relacionadas ao Ative Directory.
Note
Não há suporte para logon do SQL Server usando um FQDN (por exemplo, CONTOSO.COM\Username) . Utilize o formato CONTOSO\Username.
Não há suporte para logons do SQL Server de grupos de Domínio Local. Em vez disso, use grupos de Domínio de Segurança Global.
Conteúdo relacionado
- Criptografar conexões com o SQL Server no Linux
- Compreender a autenticação do Ative Directory para SQL Server no Linux e contêineres
- Solucionar problemas de autenticação do Ative Directory para SQL Server no Linux e contêineres
Contribuir para a documentação do SQL
Você sabia que você mesmo pode editar conteúdo SQL? Se o fizer, não só ajudará a melhorar a nossa documentação, como também será creditado como contribuidor da página.
Para obter mais informações, consulte Editar a documentação do Microsoft Learn.