Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server no Linux
Este artigo ajuda você a solucionar problemas de autenticação do Active Directory Domain Services com o SQL Server em Linux e em contêineres. Ele inclui verificações de pré-requisitos e dicas para uma configuração bem-sucedida do Active Directory, bem como uma lista de erros comuns e etapas de solução de problemas.
Validar configuração atual
Antes de começar a solução de problemas, valide o usuário atual, mssql.confo Nome do Principal de Serviço (SPN) e as configurações do realm.
Obtenha ou renove o Kerberos TGT (bilhete de concessão de bilhetes) com
kinit:kinit privilegeduser@CONTOSO.COMExecute o comando a seguir e certifique-se de que o usuário que o executa tenha acesso ao
mssql.keytab:/opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytabPara mais informações sobre o
validate-ad-configcomando, execute/opt/mssql/bin/mssql-conf validate-ad-config --help.
Consultas de DNS e DNS reverso
As pesquisas DNS no nome de domínio e no nome NetBIOS devem retornar o mesmo endereço IP, que normalmente corresponde ao endereço IP do DC (controlador de domínio). Execute esses comandos no computador host SQL Server.
nslookup contoso nslookup contoso.comSe os endereços IP não correspondem, confira Unir SQL Server em um host Linux a um domínio do Active Directory para corrigir as pesquisas DNS e a comunicação com o controlador de domínio.
Realize uma busca reversa por DNS (rDNS) para cada endereço IP a partir dos resultados anteriores. Inclua endereços IPv4 e IPv6 quando aplicável.
nslookup <IPs returned from the above commands>Tudo deve retornar
<hostname>.contoso.com. Caso contrário, verifique os registros PTR (ponteiro) no Active Directory.Talvez seja necessário trabalhar com o administrador de domínio para que o rDNS funcione. Se você não puder adicionar entradas PTR para todos os endereços IP retornados, também pode limitar o SQL Server a um subconjunto de controladores de domínio. Essa alteração afeta todos os outros serviços que usam
krb5.confno host.Para obter mais informações sobre DNS reverso, confira O que é DNS reverso?
Verificar o arquivo keytab e as permissões
Verifique se você criou o arquivo keytab (key table) e se configurou
mssql-confpara usar o arquivo correto com as permissões apropriadas. O keytab deve estar acessível para a conta de usuáriomssql. Para obter mais informações, confira Usar adutil para configurar a autenticação do Active Directory com SQL Server no Linux.Certifique-se de que você consegue listar o conteúdo do keytab e de ter adicionado os SPNs, porta, tipo de criptografia e conta de usuário corretos. Se você não digitar as senhas corretamente ao criar os SPNs e entradas keytab, encontrará erros ao tentar fazer login com autenticação do Active Directory.
klist -kte /var/opt/mssql/secrets/mssql.keytabA seguir, um exemplo de um keytab funcional. O exemplo usa dois tipos de criptografia, mas você pode usar apenas um ou mais, dependendo dos tipos de criptografia com suporte em seu ambiente. No exemplo,
sqluser@CONTOSO.COMé a conta privilegiada (que corresponde à configuraçãonetwork.privilegedadaccountemmssql-conf), e o nome do host do SQL Server ésqllinux.contoso.com, ouvindo na porta padrão1433.$ kinit privilegeduser@CONTOSO.COM Password for privilegeduser@CONTOSO.COM: $ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: privilegeduser@CONTOSO.COM Valid starting Expires Service principal 01/26/22 20:42:02 01/27/22 06:42:02 krbtgt/CONTOSO.COM@CONTOSO.COM renew until 01/27/22 20:41:57 $ klist -kte /var/opt/mssql/secrets/mssql.keytab Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab KVNO Timestamp Principal ---- ----------------- -------------------------------------------------------- 2 01/13/22 13:19:47 MSSQLSvc/sqllinux@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux:1433@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com:5533@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com:5533@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:55 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:55 sqluser@CONTOSO.COM (aes128-cts-hmac-sha1-96)
Validar as informações do domínio em krb5.conf
No
krb5.conf(localizado em/etc/krb5.conf), verifique se você forneceu os valores para o realm padrão, informações do realm e mapeamento do domínio para o realm. Revise o seguinte arquivo de exemplokrb5.conf. Para obter mais informações, confira Entenda a autenticação do Active Directory para SQL Server no Linux e em contêineres.[libdefaults] default_realm = CONTOSO.COM default_keytab_name = /var/opt/mssql/secrets/mssql.keytab default_ccache_name = "" [realms] CONTOSO.COM = { kdc = adVM.contoso.com admin_server = adVM.contoso.com default_domain= contoso.com } [domain_realm] .contoso.com = CONTOSO.COM contoso.com = CONTOSO.COMVocê pode restringir o SQL Server a entrar em contato com um subconjunto de controladores de domínio, o que será útil se a sua configuração de DNS retornar mais controladores de domínio do que o SQL Server precisa contatar. O SQL Server em Linux permite que você especifique uma lista de controladores de domínio que o SQL Server contata em formato round-robin ao realizar uma busca pelo Protocolo de Acesso a Diretórios Leves (LDAP).
Complete estes dois passos. Primeiro, modifique
krb5.confadicionando os controladores de domínio que você precisa, com o prefixokdc =.[realms] CONTOSO.COM = { kdc = kdc1.contoso.com kdc = kdc2.contoso.com .. .. }O
krb5.confarquivo é um arquivo de configuração comum do cliente Kerberos, então qualquer alteração que você faça nesse arquivo afeta outros serviços além do SQL Server. Antes de fazer qualquer alteração, consulte o administrador do seu domínio.Ative a
network.enablekdcfromkrb5confconfiguração commssql-conf, e então reinicie o SQL Server:sudo /opt/mssql/bin/mssql-conf set network.enablekdcfromkrb5conf true sudo systemctl restart mssql-server
Solucionar problemas do Kerberos
Os detalhes a seguir ajudam você a solucionar problemas de autenticação do Active Directory e identificar mensagens de erro específicas.
Rastreamento do Kerberos
Depois de criar o usuário, SPNs e keytabs, e configurarmssql-conf, verifique a configuração do Active Directory.
Para verificar a configuração do SQL Server em Linux, use a conta privilegiada para obter ou renovar o TGT Kerberos. Execute este comando para mostrar as mensagens de rastreamento Kerberos no console (stdout):
root@sqllinux mssql# KRB5_TRACE=/dev/stdout kinit -kt /var/opt/mssql/secrets/mssql.keytab sqluser
Se não houver nenhum problema, você deverá ver uma saída semelhante à amostra a seguir. Se não, o rastreamento fornece contexto sobre quais etapas revisar.
3791545 1640722276.100275: Getting initial credentials for sqluser@CONTOSO.COM
3791545 1640722276.100276: Looked up etypes in keytab: aes256-cts, aes128-cts
3791545 1640722276.100278: Sending unauthenticated request
3791545 1640722276.100279: Sending request (202 bytes) to CONTOSO.COM
3791545 1640722276.100280: Initiating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100281: Sending TCP request to stream 10.0.0.4:88
3791545 1640722276.100282: Received answer (185 bytes) from stream 10.0.0.4:88
3791545 1640722276.100283: Terminating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100284: Response was from master KDC
3791545 1640722276.100285: Received error from KDC: -1765328359/Additional pre-authentication required
3791545 1640722276.100288: Preauthenticating using KDC method data
3791545 1640722276.100289: Processing preauth types: PA-PK-AS-REQ (16), PA-PK-AS-REP_OLD (15), PA-ETYPE-INFO2 (19), PA-ENC-TIMESTAMP (2)
3791545 1640722276.100290: Selected etype info: etype aes256-cts, salt "CONTOSO.COMsqluser", params ""
3791545 1640722276.100291: Retrieving sqluser@CONTOSO.COM from /var/opt/mssql/secrets/mssql.keytab (vno 0, enctype aes256-cts) with result: 0/Success
3791545 1640722276.100292: AS key obtained for encrypted timestamp: aes256-cts/E84B
3791545 1640722276.100294: Encrypted timestamp (for 1640722276.700930): plain 301AA011180F32303231313XXXXXXXXXXXXXXXXXXXXXXXXXXXXX, encrypted 333109B95898D1B4FC1837DAE3E4CBD33AF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3791545 1640722276.100295: Preauth module encrypted_timestamp (2) (real) returned: 0/Success
3791545 1640722276.100296: Produced preauth for next request: PA-ENC-TIMESTAMP (2)
3791545 1640722276.100297: Sending request (282 bytes) to CONTOSO.COM
3791545 1640722276.100298: Initiating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100299: Sending TCP request to stream 10.0.0.4:88
3791545 1640722276.100300: Received answer (1604 bytes) from stream 10.0.0.4:88
3791545 1640722276.100301: Terminating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100302: Response was from master KDC
3791545 1640722276.100303: Processing preauth types: PA-ETYPE-INFO2 (19)
3791545 1640722276.100304: Selected etype info: etype aes256-cts, salt "CONTOSO.COMsqluser", params ""
3791545 1640722276.100305: Produced preauth for next request: (empty)
3791545 1640722276.100306: AS key determined by preauth: aes256-cts/E84B
3791545 1640722276.100307: Decrypted AS reply; session key is: aes256-cts/05C0
3791545 1640722276.100308: FAST negotiation: unavailable
3791545 1640722276.100309: Initializing KCM:0:37337 with default princ sqluser@CONTOSO.COM
3791545 1640722276.100310: Storing sqluser@CONTOSO.COM -> krbtgt/CONTOSO.COM@CONTOSO.COM in KCM:0:37337
3791545 1640722276.100311: Storing config in KCM:0:37337 for krbtgt/CONTOSO.COM@CONTOSO.COM: pa_type: 2
3791545 1640722276.100312: Storing sqluser@CONTOSO.COM -> krb5_ccache_conf_data/pa_type/krbtgt/CONTOSO.COM@CONTOSO.COM@X-CACHECONF: in KCM:0:37337
$ sudo klist
Ticket cache: KCM:0:37337
Default principal: sqluser@CONTOSO.COM
Valid starting Expires Service principal
12/28/2021 20:11:16 12/29/2021 06:11:16 krbtgt/CONTOSO.COM@CONTOSO.COM
renew until 01/04/2022 20:11:16
Habilitar o registro em log de PAL baseado em segurança e Kerberos
Para identificar mensagens de erro específicas no PAL (Camada de Abstração de Plataforma), ative security.kerberos e security.ldap loge. Crie um logger.ini arquivo com o conteúdo a seguir em /var/opt/mssql/, e então reinicie o SQL Server para capturar quaisquer erros de inicialização. Reproduza a falha. O PAL registra erros do Active Directory e mensagens de depuração para /var/opt/mssql/log/security.log.
[Output:security]
Type = File
Filename = /var/opt/mssql/log/security.log
[Logger]
Level = Silent
[Logger:security.kerberos]
Level = Debug
Outputs = security
[Logger:security.ldap]
Level = Debug
Outputs = security
O SQL Server detecta alterações no logger sem logger.ini reiniciar, mas falhas durante a inicialização do serviço Active Directory na inicialização do SQL Server passam despercebidas. Reiniciar o SQL Server captura todas as mensagens de erro.
O log de segurança continua a gravar na unidade até que você remova as alterações no logger.ini. Desative security.kerberos e security.ldap registre assim que identificar e resolver o problema, para evitar ficar sem espaço no disco.
O registrador PAL gera arquivos de log no seguinte formato:
<DATETIME> <Log level> [<logger>] <<process/thread identifier>> <message>
Por exemplo, uma linha de amostra do log está a seguir:
12/28/2021 13:56:31.609453055 Error [security.kerberos] <0003753757/0x00000324> Request ticket server MSSQLSvc/sql.contoso.com:1433@CONTOSO.COM kvno 3 enctype aes256-cts found in keytab but cannot decrypt ticket
Depois de ativar o registro PAL e reproduzir o problema, procure a primeira mensagem com um nível de log de Error. Use a tabela a seguir para encontrar o erro e siga as orientações e recomendações para solucionar e solucionar o problema.
Mensagens de erro comuns
Mensagem de erro: "Falha no logon. O login é de um domínio não confiável e não pode ser usado com autenticação integrada"
Causa possível
Você encontra esse erro ao tentar fazer login com uma conta do Active Directory após configurar a autenticação do Active Directory.
Orientação
Essa mensagem de erro genérica requer que você habilite o registro em log do PAL para identificar o erro específico.
Veja a lista a seguir de erros comuns para identificar a possível causa de cada erro e, em seguida, siga as orientações de solução de problemas para resolver o problema.
Mensagem de erro: usuário ou grupo Windows NT "CONTOSO\user" não encontrado
Causa possível
Você poderá encontrar esse erro ao tentar criar o logon do Windows ou durante a atualização do grupo.
Orientação
Para validar o problema, siga a orientação "Login falhado. O logon vem de um domínio não confiável e não pode ser usado com autenticação integrada. (Microsoft SQL Server, Erro: 18452)" e permitir o registro PAL para identificar o erro específico e solucionar o problema de acordo.
Mensagem de erro: "Não foi possível procurar um nome de domínio curto devido a um erro"
Causa possível
A sintaxe Transact-SQL para criar um logon do Active Directory é:
CREATE LOGIN [CONTOSO\user]
FROM WINDOWS;
O nome NetBIOS (CONTOSO) é necessário no comando, mas a FQDN do domínio (contoso.com) deve ser fornecida no backend ao realizar uma conexão LDAP. Para fazer essa conversão, uma pesquisa DNS é executada em CONTOSO para resolver o IP de um controlador de domínio, que pode ser vinculado a para consultas LDAP.
Orientação
A mensagem de erro "Não foi possível buscar nome de domínio curto devido a erro" sugere que nslookup for contoso não resolve para o endereço IP do controlador de domínio. Revise DNS e as buscas reversas de DNS para confirmar que nslookup tanto para NetBIOS quanto para domínio correspondem.
Mensagens de erro: "Não foi possível executar a pesquisa de rDNS para o host <hostname> devido a um erro" ou "FQDN não retornado pela pesquisa de rDNS"
Causa possível
Essas mensagens de erro geralmente indicam que os registros DNS reversos (registros PTR) não existem para todos os controladores de domínio.
Orientação
Confira as consultas DNS e DNS reverso. Depois de identificar os controladores de domínio que não possuem entradas rDNS, você tem duas opções:
Adicionar entradas rDNS para todos os controladores de domínio
Essa configuração não é do SQL Server, e você deve configurá-la no nível do domínio. Você pode ter que trabalhar com sua equipe de administração de domínio para criar os registros PTR necessários para todos os controladores de domínio que
nslookupretornam o nome de domínio.Restringir SQL Server a um subconjunto de controladores de domínio
Se você não puder adicionar registros PTR para todos os controladores de domínio retornados, pode limitar o SQL Server a um subconjunto de controladores de domínio.
Mensagem de erro: "Falha ao se vincular ao servidor LDAP ldap://CONTOSO.COM:3268: Erro Local"
Causa possível
Esse erro genérico do OpenLDAP normalmente significa uma dessas duas opções:
- Nenhuma credencial
- Problemas de rDNS
Aqui está um exemplo da mensagem de erro:
12/09/2021 14:32:11.319933684 Error [security.ldap] <0000000142/0x000001c0> Failed to bind to LDAP server ldap://[CONTOSO.COM:3268]: Local error
Orientação
Nenhuma credencial
Outras mensagens de erro aparecem primeiro se as credenciais não carregarem para conexões LDAP. Ative o registro PAL e verifique o registro de erros para mensagens de erro antes dessa. Se não houver nenhum outro erro, provavelmente não será um problema de credencial. Se encontrar um erro, corrija antes de seguir em frente. Na maioria dos casos, é uma das mensagens de erro que este artigo aborda.
Problemas de rDNS
Confira as consultas DNS e DNS reverso.
Quando a biblioteca OpenLDAP se conecta a um controlador de domínio, ela fornece ou o nome de domínio totalmente qualificado (FQDN), que neste exemplo é
contoso.com, ou o FQDNkdc1.contoso.com(). Após estabelecer a conexão (mas antes de retornar o sucesso ao chamador), a biblioteca OpenLDAP verifica o IP do servidor ao qual se conectou. Em seguida, ele realiza uma busca DNS reversa e verifica se o nome do servidor ao qual se conectou (kdc1.contoso.com) corresponde ao domínio solicitado (contoso.com). Se não corresponder, a biblioteca OpenLDAP falhará na conexão como medida de segurança. Essa descorrespondência é parte do motivo pelo qual as configurações de rDNS são importantes para o SQL Server em Linux, e são o foco deste artigo.
Mensagem de erro: "Entrada de tabela de chave não encontrada"
Causa possível
Esse erro indica problemas de acesso com o arquivo keytab ou entradas faltantes no keytab.
Orientação
Garanta que o arquivo keytab tenha o nível de acesso e as permissões corretas. A localização e o nome padrão do arquivo keytab são /var/opt/mssql/secrets/mssql.keytab. Para visualizar as permissões atuais em todos os arquivos na pasta secrets, execute este comando:
sudo ls -lrt /var/opt/mssql/secrets
Use estes comandos para definir as permissões e o nível de acesso no arquivo keytab:
sudo chown mssql /var/opt/mssql/secrets/mssql.keytab
sudo chmod 440 /var/opt/mssql/secrets/mssql.keytab
Para obter mais detalhes sobre como listar as entradas de dados no keytab e definir as permissões corretas, confira a seção anterior Verificar permissões e o arquivo keytab. Se você não atender a nenhuma das condições dessa seção, verá este erro ou um erro equivalente: "Key table entry not found".
Mensagem de erro: "Nenhuma entrada na tabela de chaves foi encontrada para <principal>"
Causa possível
Quando você tenta recuperar as credenciais <principal> do keytab, não encontra entradas aplicáveis.
Orientação
Para listar todas as entradas de dados no keytab, siga a seção Verificar permissões e o arquivo keytab deste artigo. Garanta que <principal> esteja presente. Nesse caso, a conta principal geralmente é a network.privilegedadaccount que você registra os Relatos de Proteção Externa. Se não estiver, adicione junto com o adutil comando. Para obter mais informações, confira Usar adutil para configurar a autenticação do Active Directory com SQL Server no Linux.
Mensagem de erro: "Servidor de tíquete de solicitação <entidade de segurança> não encontrado na keytab (tíquete kvno <KVNO>)"
Causa possível
Esse erro indica que o SQL Server não consegue encontrar uma entrada de keytab para o ticket solicitado com o Key Version Number (KVNO) especificado.
Orientação
Para listar todas as entradas de dados no keytab, siga a seção Verificar permissões e o arquivo keytab deste artigo. Se você não encontrar uma mensagem de erro que corresponda ao <principal> e KVNO, atualize o arquivo keytab para adicionar essa entrada, seguindo os passos dessa seção.
Você também pode executar o comando a seguir para obter o KVNO mais recente do DC. Antes de executar esse comando, obtenha ou renove o Kerberos TGT com o kinit comando. Para obter mais informações, confira Usar adutil para criar um usuário do Active Directory para o SQL Server e definir o SPN (Nome da Entidade de Serviço).
kvno MSSQLSvc/<hostname>
Mensagem de erro: "Servidor de tíquete de solicitação <entidade de segurança> kvno <KVNO> encontrado na keytab, mas não com o enctype <tipo de criptografia>"
Causa possível
Esse erro significa que a keytab do SQL Server não contém o tipo de criptografia que o cliente solicita.
Orientação
Para validar, siga a seção Verificar arquivo keytab e permissões deste artigo para listar todas as entradas no keytab. Se você não conseguir encontrar uma mensagem de erro que corresponda ao principal, KVNO e tipo de criptografia, atualize o arquivo keytab para adicionar essa entrada, seguindo os passos dessa seção.
Mensagem de erro: "Servidor de tíquete de solicitação <entidade de segurança> do kvno <KVNO> enctype <tipo de criptografia> encontrado na keytab, mas não é possível descriptografar o tíquete"
Causa possível
Essa mensagem de erro indica que o SQL Server não pode usar uma credencial do arquivo keytab para descriptografar a solicitação de autenticação recebida. Uma senha incorreta frequentemente causa esse erro.
Orientação
Recrie a aba de teclas com a senha correta. Se você usar adutil, crie a keytab com a senha correta e siga os passos do Tutorial: Use o Adutil para configurar a autenticação do Active Directory com o SQL Server em Linux.
Portas comuns
Esta tabela mostra as portas comuns que o SQL Server em Linux usa para configurar e administrar a autenticação do Active Directory.
| Serviço do Active Directory | Porto |
|---|---|
| DNS | 53 |
| LDAP | 389 |
| LDAPS | 636 |
| Kerberos | 88 |