Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server em Linux
Este tutorial explica como configurar o SQL Server em contêineres 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.
Observação
Para obter orientações atuais sobre a configuração de rede, consulte a documentação do seu sistema operacional (SO).
Este tutorial consiste nas seguintes tarefas:
- Instalar adutil
- Adicione o host Linux ao domínio do Active Directory
- Crie um usuário do Ative Directory para o SQL Server e defina o SPN (Nome da Entidade de Serviço) usando a ferramenta adutil
- Criar o arquivo keytab de serviço do SQL Server
- Crie os
mssql.confarquivos ekrb5.confa serem usados pelo contêiner do SQL Server - Monte os arquivos de configuração e implante o contêiner do SQL Server
- Criar logons do SQL Server baseados no Ative Directory usando o Transact-SQL
- Conectar-se ao SQL Server usando a autenticação do Ative Directory
Pré-requisitos
O seguinte é necessário antes de configurar a autenticação do Ative Directory:
- Tenha um Controlador de Domínio Ative Directory (Windows) na sua rede.
- Instale o adutil em uma máquina host Linux, que está associada a um domínio. Siga a seção Instalar adutil para obter detalhes.
Implantação e preparação de contêineres
Para configurar seu contêiner, você precisa saber com antecedência a porta que será usada pelo contêiner no host. A porta padrão, 1433, pode ser mapeada de forma diferente no host do contêiner. Para este tutorial, a porta 5433 no host será mapeada para a porta 1433 do contêiner. Para obter mais informações, consulte nosso Guia de início rápido, Guia de início rápido: executar imagens de contêiner do SQL Server Linux com o Docker.
Ao registrar nomes de entidade de serviço (SPN), você pode usar o nome do host da máquina ou o nome do contêiner. No entanto, você deve configurá-lo de acordo com o que você gostaria de ver, quando você se conectar ao contêiner externamente.
Verifique se há uma entrada de host de encaminhamento (A) adicionada no Active Directory para o endereço IP do host Linux, mapeando para o nome do contêiner do SQL Server. Neste tutorial, o endereço IP da máquina host é sql1, e meu nome de 10.0.0.10 contêiner do SQL Server é sql1. Adicione a entrada de host de encaminhamento no Ative Directory, conforme mostrado na captura de tela. A entrada garante que, quando os usuários se conectam ao sql1.contoso.com, ele atinge o host certo.
Para este tutorial, estamos usando um ambiente no Azure com três máquinas virtuais (VMs). Uma VM atuando como controlador de domínio (DC) do Windows, com o nome contoso.com de domínio. O Controlador de Domínio é denominado adVM.contoso.com. A segunda máquina é uma máquina Windows chamada winbox, executando a área de trabalho do Windows 10, que é usada como uma caixa de cliente e tem o SQL Server Management Studio (SSMS) instalado. A terceira máquina é uma máquina Ubuntu 18.04 LTS chamada sql1, que hospeda os contêineres do SQL Server. Todas as máquinas estão ligadas ao domínio contoso.com. Para obter mais informações, consulte Associar o SQL Server em um host Linux a um domínio do Ative Directory.
Observação
Associar a máquina de contêiner host ao domínio não é obrigatório, como você pode ver mais adiante neste artigo.
Instalar adutil
Para instalar o adutil, siga as etapas em Introdução ao adutil - Utilitário Ative Directory, em uma máquina host que ingressou no domínio.
Criar usuário do Ative Directory, SPNs e keytab de serviço do SQL Server
Se você não quiser que o host do contêiner faça parte do domínio e não seguiu as etapas para unir a máquina ao domínio, siga estas etapas em outra máquina Linux que já faça parte do domínio do Ative Directory:
Crie um usuário do Ative Directory para o SQL Server e defina o SPN usando adutil.
Crie e configure o arquivo keytab de serviço do SQL Server.
Copie o mssql.keytab arquivo que foi criado para a máquina host que executará o contêiner do SQL Server e configure o contêiner para usar o arquivo copiado mssql.keytab. Opcionalmente, também pode associar o seu host Linux que irá executar o contentor do SQL Server ao domínio do Active Directory e seguir estes passos na mesma máquina.
Criar usuário do Ative Directory para SQL Server e definir Nome da Entidade de Serviço com adutil
Habilitar a autenticação do Ative Directory no SQL Server em contêineres Linux requer que as etapas a seguir sejam executadas em uma máquina Linux que faça parte do domínio do Ative Directory.
Obtenha ou renove o Kerberos TGT (tíquete de concessão de tíquetes) usando o comando
kinit. Use uma conta privilegiada para o comandokinit. A conta precisa ter permissão para se conectar ao domínio e também deve ser capaz de criar contas e SPNs no domínio.Neste script de exemplo, um usuário privilegiado chamado
privilegeduser@CONTOSO.COMjá foi criado no controlador de domínio.kinit privilegeduser@CONTOSO.COMUsando adutil, crie o novo usuário que será usado como a conta privilegiada do Ative Directory pelo SQL Server. Substitua
<password>por uma senha válida.adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'As senhas podem ser especificadas de qualquer uma das três maneiras:
- Indicador de palavra-passe:
--password <password> - Variáveis de ambiente -
ADUTIL_ACCOUNT_PWD - Entrada interativa
A precedência dos métodos de entrada de senha segue a ordem das opções listadas acima. As opções recomendadas são fornecer a senha usando variáveis de ambiente ou entrada interativa, pois elas são mais seguras em comparação com o sinalizador de senha.
Você pode especificar o nome da conta usando o nome distinto (
-distname) como mostrado acima, ou também pode usar o nome da Unidade Organizacional (UO). O nome da UO (--ou) tem precedência sobre o nome distinto, caso você especifique ambos. Você pode executar o comando abaixo para obter mais detalhes:adutil user create --help- Indicador de palavra-passe:
Registre SPNs para o utilizador criado acima. Você pode usar o nome da máquina host em vez do nome do contêiner, se desejar, dependendo de como você gostaria que a conexão parecesse externamente. Neste tutorial, a porta
5433é usada em vez de1433. Este é o mapeamento de portas para o contentor. O número da porta pode ser diferente.adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433-
addautocriará os SPNs automaticamente, desde que haja privilégios suficientes para a conta kinit . -
-n: Nome da conta à qual os SPNs serão atribuídos. -
-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. Forneça também o FQDN para o nome do contêiner. Nesse caso, o nome do contêiner ésql1e o FQDN ésql1.contoso.com. -
-p: A porta a ser usada para gerar SPNs. Se não for especificado, os SPNs são gerados sem uma porta. As conexões só funcionarão nesse caso quando o SQL Server estiver escutando a porta padrão,1433.
-
Criar arquivo keytab de serviço do SQL Server
Crie o arquivo keytab que contém entradas para cada um dos quatro SPNs criados anteriormente e um para o usuário. O arquivo keytab será montado no contêiner, para que possa ser criado em qualquer local no host. Você pode alterar esse caminho com segurança, desde que o keytab resultante seja montado corretamente ao usar o docker/podman para implantar o contêiner.
Para criar o keytab para todos os SPNs, podemos usar a createauto opção. Substitua <password> por uma senha válida.
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
-
-k: Caminho onde você gostaria que omssql.keytabarquivo fosse criado. No exemplo anterior, o diretório/container/sql1/secretsjá deveria existir no host. -
-p: A porta a ser usada para gerar SPNs. Se não for especificado, os SPNs sã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. Forneça também o FQDN para o nome do contêiner. Nesse caso, o nome do contêiner ésql1e o FQDN ésql1.contoso.com. -
-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. -
--password: Esta é a senha da conta de usuário privilegiada do Ative Directory que foi criada anteriormente. -
-eou--enctype: Tipos de criptografia para a entrada keytab. Use uma lista de valores separados por vírgula. Se não for especificado, um prompt interativo será apresentado.
Quando lhe é dada a opção de escolher os tipos de encriptação, pode escolher mais do que um. Para este exemplo, escolhemos aes256-cts-hmac-sha1-96 e arcfour-hmac. Certifique-se de escolher um tipo de criptografia suportado pelo host e domínio.
Se você quiser escolher o tipo de criptografia de forma não interativa, poderá especificar sua escolha de tipo de criptografia com o argumento -e no comando acima. Para obter ajuda adicional sobre os comandos adutil , execute o seguinte comando.
adutil keytab createauto --help
Atenção
arcfour-hmac é uma criptografia fraca e não um tipo de criptografia recomendado para ser usado em um ambiente de produção.
Para criar o keytab para o usuário, o comando é o seguinte. Substitua <password> por uma senha válida.
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
-
-k: Caminho onde você gostaria que omssql.keytabarquivo fosse criado. No exemplo anterior, o diretório/container/sql1/secretsjá deveria existir no host. -
-p: Principal para adicionar ao keytab.
O keytab adutil create/autocreate não substitui os ficheiros anteriores; adiciona ao ficheiro se já estiver presente.
Verifique se o keytab criado tem as permissões corretas definidas ao implantar o contêiner.
chmod 440 /container/sql1/secrets/mssql.keytab
Neste ponto, você pode copiar mssql.keytab do host Linux atual para o host Linux onde implantaria o contêiner do SQL Server e seguir o restante das etapas no host Linux que executará o contêiner do SQL Server. Se as etapas acima foram executadas no mesmo host Linux onde os contêineres do SQL Server serão implantados, siga as próximas etapas também no mesmo host.
Criar arquivos de configuração a serem usados pelo contêiner do SQL Server
Crie um
mssql.confarquivo com as configurações do Ative Directory. Esse arquivo pode ser criado em qualquer lugar no host e precisa ser montado corretamente durante o comando docker run. Neste exemplo, colocamos esse arquivomssql.confem/container/sql1, que é nosso diretório de contêiner. O conteúdo domssql.confé mostrado da seguinte forma:[network] privilegedadaccount = sqluser kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab-
privilegedadaccount: Usuário privilegiado do Ative Directory a ser usado para autenticação do Ative Directory. -
kerberoskeytabfile: O caminho no contêiner onde omssql.keytabarquivo será localizado.
-
Crie um
krb5.confarquivo, como o exemplo a seguir. O invólucro é importante nestes ficheiros.[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.COMCopie todos os arquivos,
mssql.conf,krb5.conf,mssql.keytabpara um local que será montado no contêiner do SQL Server. Neste exemplo, esses arquivos são colocados no host nos seguintes locais:mssql.confekrb5.confem/container/sql1/.mssql.keytabé colocado no local/container/sql1/secrets/.Verifique se há permissão suficiente nessas pastas para o usuário que executa o comando docker/podman. Quando o contêiner é iniciado, o usuário precisa acessar o caminho da pasta criada. Neste exemplo, indicamos as permissões atribuídas ao caminho da pasta abaixo:
sudo chmod 755 /container/sql1/
Monte arquivos de configuração e implante o contêiner do SQL Server
Execute o contêiner do SQL Server e monte os arquivos de configuração corretos do Ative Directory que foram criados anteriormente:
Importante
A variável de ambiente SA_PASSWORD foi preterida. Utilize MSSQL_SA_PASSWORD em substituição.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
-d mcr.microsoft.com/mssql/server:2019-latest
Atenção
A sua palavra-passe deve seguir a política de palavra-passe 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.
Ao executar um contentor em LSM (Linux Security Module) em hosts habilitados para SELinux, é necessário montar os volumes usando a opção Z, que indica ao Docker para rotular o conteúdo com um rótulo privado e não partilhado. Para obter mais informações, consulte configurar o rótulo SE Linux.
Nosso exemplo conteria os seguintes comandos. Substitua <password> por uma senha válida.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/ \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
--dns-search contoso.com \
--dns 10.0.0.4 \
--add-host adVM.contoso.com:10.0.0.4 \
--add-host contoso.com:10.0.0.4 \
--add-host contoso:10.0.0.4 \
-d mcr.microsoft.com/mssql/server:2019-latest
- Os arquivos
mssql.confekrb5.confestão localizados no caminho/container/sql1do arquivo host . - O
mssql.keytabque foi criado está localizado no caminho do ficheiro do host/container/sql1/secrets. - Como nossa máquina host está no Azure, os detalhes do Ative Directory precisam ser anexados ao
docker runcomando na mesma ordem. No nosso exemplo, o controladoradVMde domínio está no domíniocontoso.com, com um endereço IP de10.0.0.4. O controlador de domínio executa DNS e KDC.
Criar logons do SQL Server baseados no Ative Directory usando o Transact-SQL
Conecte-se ao contêiner do SQL Server. Usando os comandos a seguir, crie o login e confirme se ele existe.
Observação
Você pode se conectar a uma instância do SQL Server usando qualquer ferramenta de cliente familiar do SQL Server, como sqlcmd, SQL Server Management Studio (SSMS) ou a extensão MSSQL para Visual Studio Code.
CREATE LOGIN [contoso\amvin]
FROM WINDOWS;
SELECT name
FROM sys.server_principals;
Conectar-se ao SQL Server com autenticação do Ative Directory
Você pode se conectar a uma instância do SQL Server usando qualquer ferramenta de cliente familiar do SQL Server, como sqlcmd, SQL Server Management Studio (SSMS) ou a extensão MSSQL para Visual Studio Code.
Inicie sessão no SQL Server com credenciais do Windows usando o nome e o número de porta do SQL Server (o nome pode ser o nome do contentor ou o nome do anfitrião). Para o nosso exemplo, o nome do servidor seria sql1.contoso.com,5433.
O comando seguinte mostra como se ligar ao seu contentor com sqlcmd.
sqlcmd -E -S 'sql1.contoso.com,5433'
Recursos
- 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