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.
Observação
Embora o Microsoft Entra ID seja o novo nome para o Azure Ative Directory (Azure AD), para evitar a interrupção de ambientes existentes, o Azure AD ainda permanece em alguns elementos codificados, como campos de interface do usuário, provedores de conexão, códigos de erro e cmdlets. Neste artigo, os dois nomes são intercambiáveis.
Propósito
O Microsoft ODBC Driver para SQL Server versão 13.1 e superiores permite que aplicações ODBC se liguem à Azure SQL Database ou Azure SQL Managed Instance usando identidades no Microsoft Entra ID. A autenticação pode ser feita com um nome de utilizador e palavra-passe, um token de acesso Microsoft Entra, uma identidade gerida Microsoft Entra (17.3+) ou Autenticação Integrada do Windows num ambiente federado, unido ao domínio (17.6+ em Linux/macOS). Para a versão 13.1 do Driver ODBC, a autenticação do token de acesso Microsoft Entra é apenas para Windows. O Driver ODBC versão 17 e superiores suporta esta autenticação em todas as plataformas (Windows, Linux e macOS). Um novo método interativo de autenticação Microsoft Entra, que suporta autenticação multifator, é introduzido no ODBC Driver versão 17.1 para Windows. Um novo método de autenticação de identidade gerida Microsoft Entra foi adicionado na versão 17.3.1.1 do Driver ODBC para identidades geridas atribuídas pelo sistema e atribuídas pelo utilizador. Todas estas opções são realizadas utilizando novas palavras-chave DSN, cadeias de ligação e atributos de ligação.
Para utilizar a autenticação Microsoft Entra, deve configurar a sua fonte de dados Azure SQL. Para obter mais informações, consulte Configurar e gerir a autenticação de Microsoft Entra com Azure SQL.
Observação
O driver ODBC nas versões do Linux e macOS anteriores à versão 17.6 suporta apenas autenticação Microsoft Entra diretamente com o Microsoft Entra ID. Se estiver a usar autenticação por nome de utilizador/palavra-passe Microsoft Entra a partir de um cliente Linux ou macOS e a sua configuração Microsoft Entra exigir que o cliente autentique num endpoint Microsoft Entra Federation Services, a autenticação pode falhar. A partir da versão 17.6 do driver, esta limitação foi removida.
Novas e/ou modificadas palavras-chave DSN e cadeia de ligação
A Authentication palavra-chave pode ser usada ao ligar com uma DSN ou cadeia de ligação para controlar o modo de autenticação. O valor definido na string de ligação sobrepõe-se ao da DSN, se for fornecido. O valor pré-atributo da Authentication definição é o valor calculado a partir da cadeia de ligação e dos valores DSN.
| Nome | Valores | Predefinido | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Authentication |
(indefinido), (string vazia), SqlPassword, ActiveDirectoryPassword, ActiveDirectoryIntegrated, ActiveDirectoryInteractive, ActiveDirectoryMsi, ActiveDirectoryServicePrincipal |
(não definido) | Controla o modo de autenticação.
|
||||||||||||||||||
Encrypt |
(não definido), Yes/Mandatory(18.0+), No/Optional(18.0+), Strict(18.0+) |
(ver descrição) | Controla a encriptação de uma ligação. Se o valor anterior ao atributo da definição Authentication não for none na DSN ou na cadeia de ligação, o padrão é Yes. O padrão está definido por predefinição também nas versões 18.0.1+. Caso contrário, o padrão é No. Se o atributo SQL_COPT_SS_AUTHENTICATION sobrescrever o valor pré-atributo de Authentication, defina explicitamente o valor de Encriptação na DSN ou na cadeia de ligação ou no atributo de conexão. O valor de pré-atributo de Encriptação é Yes se o valor estiver definido para Yes na cadeia DSN ou na cadeia de ligação. |
Novos e/ou Modificados Atributos de Ligação
Os seguintes atributos de ligação pré-conexão foram introduzidos ou modificados para suportar a autenticação Microsoft Entra. Quando um atributo de conexão tem uma cadeia de ligação correspondente ou palavra-chave DSN e está definido, o atributo de ligação tem prioridade.
| Attribute | Tipo | Valores | Predefinido | Description |
|---|---|---|---|---|
SQL_COPT_SS_AUTHENTICATION |
SQL_IS_INTEGER |
SQL_AU_NONE, SQL_AU_PASSWORD, SQL_AU_AD_INTEGRATED, SQL_AU_AD_PASSWORDSQL_AU_AD_INTERACTIVE, SQL_AU_AD_MSI, SQL_AU_AD_SPA, SQL_AU_RESET |
(não definido) | Veja a descrição da Authentication palavra-chave acima.
SQL_AU_NONE é fornecido para sobrepor explicitamente um valor definido Authentication na DSN e/ou cadeia de conexão, enquanto SQL_AU_RESET remove o atributo caso ele tenha sido definido, permitindo que o valor da DSN ou da cadeia de conexão tenha prioridade. |
SQL_COPT_SS_ACCESS_TOKEN |
SQL_IS_POINTER |
Apontador para ACCESSTOKEN ou NULL |
NULO | Se não for nulo, especifica o token de acesso Microsoft Entra a utilizar. É um erro especificar um token de acesso assim como palavras-chave de cadeia de conexão UID, PWD, Trusted_Connection, ou Authentication ou os seus atributos equivalentes. NOTA: O driver ODBC versão 13.1 só suporta esta definição no Windows. |
SQL_COPT_SS_ENCRYPT |
SQL_IS_INTEGER |
SQL_EN_OFF, SQL_EN_ON |
(ver descrição) | Controla a encriptação de uma ligação.
SQL_EN_OFF e SQL_EN_ON desativar e ativar encriptação, respetivamente. Se o valor do pré-atributo da definição não for Authentication ou se SQL_COPT_SS_ACCESS_TOKEN estiver definido, e Encrypt não for especificado nem na DSN nem na cadeia de conexão, o padrão é SQL_EN_ON. Caso contrário, o padrão é SQL_EN_OFF. Se o atributo SQL_COPT_SS_AUTHENTICATION de ligação estiver definido como não none, defina SQL_COPT_SS_ENCRYPT explicitamente para o valor desejado se Encrypt não tiver sido especificado na DSN ou na cadeia de conexão. O valor efetivo deste atributo controla se a encriptação é usada para a ligação. |
SQL_COPT_SS_OLDPWD |
- | - | - | Não é suportado com o Microsoft Entra ID, porque as alterações de palavra-passe para as entidades Microsoft Entra não podem ser feitas através de uma ligação ODBC. A expiração da palavra-passe para autenticação SQL Server foi introduzida no SQL Server 2005. O SQL_COPT_SS_OLDPWD atributo foi adicionado para permitir que o cliente forneça tanto a palavra-passe antiga como a nova para a ligação. Quando esta propriedade é definida, o fornecedor não usa o pool de ligações para a primeira ligação ou para ligações futuras, pois a cadeia de ligação contém a "palavra-passe antiga", que agora foi alterada. |
SQL_COPT_SS_INTEGRATED_SECURITY |
SQL_IS_INTEGER |
SQL_IS_OFF,SQL_IS_ON |
SQL_IS_OFF |
Obsoleto; use SQL_COPT_SS_AUTHENTICATION defina como SQL_AU_AD_INTEGRATED em vez disso. Força o uso da Autenticação do Windows (Kerberos no Linux e macOS) para validação de acesso no login do servidor. Quando a Autenticação Windows é utilizada, o driver ignora os valores de identificador de utilizador e palavra-passe fornecidos durante o processamento de SQLConnect, SQLDriverConnect ou SQLBrowseConnect. |
Adições de Interface de Utilizador para o Microsoft Entra ID (apenas controlador Windows)
A configuração da DSN e as interfaces de ligação do driver foram melhoradas com as opções adicionais necessárias para autenticar com o Microsoft Entra ID.
Criar e editar DSNs na interface de utilizador
É possível usar as opções de autenticação do Microsoft Entra ao criar ou editar uma DSN existente usando a interface de configuração do driver:
Authentication=ActiveDirectoryIntegrated para autenticação integrada do Microsoft Entra no Azure SQL
Authentication=ActiveDirectoryPassword para autenticação de utilizador e senha do Microsoft Entra no Azure SQL
Authentication=ActiveDirectoryInteractive para autenticação interativa do Microsoft Entra com Azure SQL
Observação
A partir da versão 17.9 do driver, o comportamento de autenticação interativa mudou. Os utilizadores serão sempre solicitados a obter credenciais, a menos que o driver tenha um token de acesso válido armazenado em cache. Esta alteração impede que os utilizadores em dispositivos associados ao Microsoft Entra ignorem o pedido e iniciem sessão automaticamente com credenciais em cache ao usar a autenticação de ActiveDirectoryInteractive.
Authentication=SqlPassword para autenticação por nome de utilizador/palavra-passe para SQL Server e Azure SQL
Trusted_Connection=Yes para autenticação integrada do SSPI do Windows antigo
Authentication=ActiveDirectoryMsi para a autenticação de identidade gerida da Microsoft Entra
Authentication=ActiveDirectoryServicePrincipal para autenticação do principal de serviço Microsoft Entra
As sete opções correspondem a Trusted_Connection=Yes (autenticação integrada existente apenas para Windows SSPI) e Authentication=ActiveDirectoryIntegrated, SqlPassword, ActiveDirectoryPassword, ActiveDirectoryInteractive, ActiveDirectoryMsi, , e ActiveDirectoryServicePrincipal respetivamente.
SQLDriverConnect Prompt (apenas driver Windows)
O diálogo de aviso apresentado pelo SQLDriverConnect quando solicita a informação necessária para completar a ligação contém quatro novas opções para a autenticação Microsoft Entra:
Estas opções correspondem às mesmas seis disponíveis na interface de configuração DSN acima.
Exemplo de cadeias de conexão
Autenticação SQL Server - sintaxe legada. O certificado do servidor não é validado, e a encriptação só é usada se o servidor a aplicar. O nome de utilizador/palavra-passe é passado na cadeia de ligação.
server=Server;database=Database;UID=UserName;PWD=<password>;Encrypt=no;TrustServerCertificate=yes;Autenticação SQL - nova sintaxe. O cliente solicita encriptação (o valor padrão de
Encryptétrue) e o certificado do servidor é validado, independentemente da definição de encriptação (a menos queTrustServerCertificateesteja definida paratrue). O nome de utilizador/palavra-passe é passado na cadeia de ligação.server=Server;database=Database;UID=UserName;PWD=<password>;Authentication=SqlPassword;Autenticação integrada do Windows (Kerberos em Linux e macOS) usando SSPI (para SQL Server ou SQL IaaS) - sintaxe atual. O certificado do servidor não é validado, a menos que o servidor exija encriptação.
server=Server;database=Database;Trusted_Connection=yes;Encrypt=no;(Apenas driver para Windows.) Autenticação integrada do Windows usando SSPI (se a base de dados de destino estiver em SQL Server ou SQL Server em VMs Azure) - nova sintaxe. O cliente solicita encriptação (o valor padrão de
Encryptétrue) e o certificado do servidor é validado, independentemente da definição de encriptação (a menos queTrustServerCertificateesteja definida paratrue).server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;Autenticação por nome de utilizador/palavra-passe do Microsoft Entra (se a base de dados alvo estiver na Azure SQL Database ou Azure SQL Managed Instance). O certificado do servidor é validado, independentemente da definição de encriptação (a menos que
TrustServerCertificateesteja definido paratrue). O nome de utilizador/palavra-passe é passado na cadeia de ligação.server=Server;database=Database;UID=UserName;PWD=<password>;Authentication=ActiveDirectoryPassword;Encrypt=yes;(Windows, e Linux/macOS 17.6+, apenas driver.) Autenticação integrada do Windows usando ADAL ou Kerberos, que envolve resgatar credenciais da conta Windows por um token de acesso Microsoft Entra, assumindo que a base de dados alvo está em Azure SQL. O certificado do servidor é validado, independentemente da definição de encriptação (a menos que
TrustServerCertificateesteja definido paratrue). No Linux/macOS, é necessário disponer de um bilhete Kerberos adequado. Para mais informações, consulte a secção abaixo sobre Contas Federadas e Utilização de Autenticação Integrada.server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;Encrypt=yes;(Apenas driver para Windows.) A Autenticação Interativa Microsoft Entra utiliza a tecnologia de autenticação multifator Microsoft Entra para estabelecer a ligação. Neste modo, ao fornecer o ID de login, é ativado um diálogo de Autenticação Azure que permite ao utilizador inserir verificações adicionais para completar a ligação. O nome de utilizador é passado na cadeia de ligação.
server=Server;database=Database;UID=UserName;Authentication=ActiveDirectoryInteractive;Encrypt=yes;
A autenticação de identidade gerida Microsoft Entra pode usar uma identidade gerida atribuída pelo sistema ou pelo utilizador. Para uma identidade atribuída pelo utilizador, defina o UID como o ID de cliente da identidade no Azure App Service ou Azure Container Instance; caso contrário, utilize o ID do objeto da identidade. Para identidade atribuída ao sistema, UID não é obrigatório.
Para a identidade atribuída ao sistema:
server=Server;database=Database;Authentication=ActiveDirectoryMsi;Encrypt=yes;Para identidade atribuída pelo utilizador com ID de objeto igual a
myObjectId:server=Server;database=Database;UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;Autenticação do principal de serviço Microsoft Entra
server=Server;database=Database;UID=clientId;PWD=<password>;Authentication=ActiveDirectoryServicePrincipal;Encrypt=yes;
Observações
Ao utilizar as opções Microsoft Entra com o driver Windows ODBC anterior à versão 17.4.2, certifique-se de que a Biblioteca de Autenticação do Active Directory para SQL Server foi instalada. Ao usar os drivers Linux e macOS, certifique-se de que está
libcurlinstalado. Para a versão 17.2 do driver e posteriores, esta não é uma dependência explícita, pois não é necessária para os outros métodos de autenticação ou operações ODBC.Quando a configuração Microsoft Entra inclui políticas de acesso condicional, e o cliente é Windows 10 ou Server 2016 ou posterior, a autenticação via Integrated ou nome de utilizador/palavra-passe pode falhar. As políticas de acesso condicional requerem o uso do Web Account Manager (WAM), que é suportado na versão 17.6 ou posterior do driver para Windows. Para usar WAM, crie um novo valor de cadeia nomeado
ADALuseWAMemHKLM\Software\ODBC\ODBCINST.INI\ODBC Driver 17 for SQL Server,HKCU\Software\ODBC\ODBC.INI\<your-user-DSN-name>, ouHKLM\Software\ODBC\ODBC.INI\<your-system-DSN-name>para configuração global, DSN de utilizador ou DSN do sistema, respetivamente, e defina-o para um valor de 1. Note que a autenticação com WAM não suporta a execução da aplicação como um utilizador diferente comrunas. Cenários que requerem políticas de Acesso Condicional não são suportados para Linux ou macOS.Para se ligar utilizando um nome de utilizador e palavra-passe de conta SQL Server, pode agora usar a nova opção
SqlPassword, recomendada especialmente para Azure SQL, pois esta opção permite definições de ligação predefinidas mais seguras.Para se ligar usando um nome de utilizador e palavra-passe de uma conta Microsoft Entra, especifique
Authentication=ActiveDirectoryPasswordna cadeia de ligação, juntamente com as palavras-chaveUIDePWD, correspondendo ao nome de utilizador e à palavra-passe, respetivamente.Para se ligar usando autenticação Windows Integrated ou Microsoft Entra Integrated (Windows, e Linux/macOS 17.6+, apenas driver), especifique
Authentication=ActiveDirectoryIntegratedna cadeia de ligação. O condutor escolherá automaticamente o modo de autenticação correto. Para versões do driver 17.7 ou anteriores,UIDePWDnão devem ser especificados. A partir da versão 17.8,UIDePWDdo driver são ignorados.Para se conectar usando a autenticação interativa do Microsoft Entra (apenas com o driver Windows),
UIDdeve ser especificado. Para as versões do driver 17.7 e anteriores, não deve ser especificadoPWD. A partir da versão 17.8 do driver,PWDé ignorada.A partir da versão 18.1,
Trusted_Connection=Yesdeixou de usar por defeito a autenticação federada Microsoft Entra ID, passando a usar em alternativa SSPI integrada. Para usar o ID Microsoft Entra para esta opção,TrustedConnection_UseAAD=Yesdeve estar configurado.As versões 17.7 e inferiores do driver ODBC têm um problema conhecido com o tempo limite de conexão quando a autenticação Microsoft Entra e a funcionalidade Force Encryption estão ativadas numa instância do SQL Server. O registo de erros do SQL Server pode conter mensagens de erro tais como: "Erro: 33155, Gravidade: 20, Estado: 1. Foi gerado um evento de desconexão quando o servidor está à espera do token de Autenticação Federada. Isto pode dever-se ao encerramento do cliente ou ao timeout do servidor expirado.". Se estiver a usar soluções de alta disponibilidade, como grupos de disponibilidade Always On ou instâncias de clusters de failover, a comunicação interna do cluster para SQL Server pode ser afetada por este comportamento, o que pode afetar a disponibilidade de recursos. No registo do cluster, pode ver mensagens de erro como:
[hadrag] Connect to SQL Server ...ODBC Error: [HY000] [Microsoft][ODBC Driver 17 for SQL Server]An unknown error has occurred. Detailed error information is not available. (0). As versões 17.10 e superiores do driver ODBC corrigem este problema e, com o SQL Server 2022 GDR KB5021522 /CU1 KB5022375, o driver mais recente que contém esta correção é instalado com a instalação do SQL Server. Pode verificar qual a versão do driver ODBC que tem instalado consultando o Administrador da Fonte de Dados ODBC.A partir da versão 18.3 do driver ODBC, a autenticação por Identidade Gerida (ActiveDirectoryMSI) é suportada no Azure Arc e no Azure Cloud Shell.
Autenticação com um token de acesso
O SQL_COPT_SS_ACCESS_TOKEN atributo pré-conexão permite o uso de um token de acesso obtido do ID Microsoft Entra para autenticação em vez de nome de utilizador e palavra-passe, e também contorna a negociação e obtenção de um token de acesso pelo driver. Para usar um token de acesso, defina o SQL_COPT_SS_ACCESS_TOKEN atributo de ligação como um ponteiro para uma ACCESSTOKEN estrutura:
typedef struct AccessToken
{
DWORD dataSize;
BYTE data[];
} ACCESSTOKEN;
É ACCESSTOKEN uma estrutura de comprimento variável composta por um comprimento de 4 bytes seguido de bytes de comprimento de dados opacos que formam o token de acesso. Devido à forma como o SQL Server gere os tokens de acesso, um obtido através de uma resposta OAuth 2.0 JSON deve ser expandido para que cada byte seja seguido por um byte de enchimento zero, semelhante a uma string UCS-2 contendo apenas caracteres ASCII. No entanto, o token é um valor opaco e o comprimento especificado, em bytes, NÃO deve incluir nenhum terminador nulo. Devido às consideráveis restrições de comprimento e formato, este método de autenticação só está disponível programaticamente através do SQL_COPT_SS_ACCESS_TOKEN atributo de conexão. Não existe uma palavra-chave correspondente a um DSN ou uma string de conexão. A cadeia de ligação não deve conter UID, PWD, Authentication, ou Trusted_Connection palavras-chave.
Observação
A versão 13.1 do Driver ODBC só suporta esta autenticação no Windows. As versões subsequentes suportam esta autenticação em todas as plataformas.
Código de exemplo de autenticação Microsoft Entra
O exemplo seguinte mostra o código necessário para se ligar ao SQL Server usando o Microsoft Entra ID com palavras-chave de ligação. Não há necessidade de alterar o código da aplicação em si. A cadeia de ligação, ou DSN se for usada, é a única modificação necessária para usar o Microsoft Entra ID para autenticação:
...
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;PWD=<password>;Authentication=ActiveDirectoryPassword;Encrypt=yes;"
...
SQLDriverConnect(hDbc, NULL, connString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
...
O exemplo seguinte mostra o código necessário para se ligar ao SQL Server usando a autenticação do token de acesso Microsoft Entra. Neste caso, é necessário modificar o código da aplicação para processar o token de acesso e definir o atributo de ligação associado.
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};Encrypt=yes;"
SQLCHAR accessToken[] = "eyJ0eXAiOi..."; // In the format extracted from an OAuth JSON response
...
DWORD dataSize = 2 * strlen(accessToken);
ACCESSTOKEN *pAccToken = malloc(sizeof(ACCESSTOKEN) + dataSize);
pAccToken->dataSize = dataSize;
// Expand access token with padding bytes
for(int i = 0, j = 0; i < dataSize; i += 2, j++) {
pAccToken->data[i] = accessToken[j];
pAccToken->data[i+1] = 0;
}
...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_ACCESS_TOKEN, (SQLPOINTER)pAccToken, SQL_IS_POINTER);
SQLDriverConnect(hDbc, NULL, connString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
...
free(pAccToken);
A seguinte string de conexão de exemplo destina-se à autenticação interativa com o Microsoft Entra. Não contém o campo PWD, pois a palavra-passe seria introduzida no ecrã de Autenticação Azure.
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;Authentication=ActiveDirectoryInteractive;Encrypt=yes;"
A seguinte cadeia de ligação de exemplo destina-se à autenticação de identidade gerida pelo Microsoft Entra. O UID é definido como o ID do objeto/cliente da identidade do utilizador quando se utiliza uma identidade atribuída pelo utilizador.
// For system-assigned identity,
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};Authentication=ActiveDirectoryMsi;Encrypt=yes;"
...
// For user-assigned identity with object ID equals to myObjectId
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;"
Considerações para a utilização de Contas Federadas ADFS em Linux/macOS
A partir da versão 17.6, os drivers para Linux e macOS suportam autenticação usando contas federadas Microsoft Entra ADFS , utilizando nome de utilizador/palavra-passe (ActiveDirectoryPassword) ou Kerberos (ActiveDirectoryIntegrated). Existem algumas limitações dependendo da plataforma ao usar o modo Integrado.
Ao autenticar com um utilizador cujo sufixo UPN é diferente do domínio Kerberos, ou seja, se estiver em uso um sufixo UPN alternativo, é necessário usar a opção Enterprise Principal (usar a -E opção com kinit, e fornecer o nome principal no formulário user@federated-domain) ao obter bilhetes Kerberos. Desta forma, o driver pode determinar corretamente tanto o domínio federado como o reino Kerberos.
Pode verificar se existe um ticket Kerberos adequado ao inspecionar a saída do klist comando. Se o domínio federado for o mesmo que o domínio de Kerberos e o sufixo UPN, o nome principal é da forma user@realm. Se for diferente, o nome principal deve ser da forma user@federated-domain@realm.
Linux
No SUSE 11, a versão padrão da biblioteca Kerberos da 1.6.x não suporta a opção Enterprise Principal necessária para usar sufixos UPN alternativos. Para usar sufixos UPN alternativos com autenticação integrada Microsoft Entra, atualize a biblioteca Kerberos para a versão 1.7 ou mais recente.
No Alpine Linux, o padrão libcurl não suporta a autenticação SPNEGO/Kerberos necessária para a autenticação integrada Microsoft Entra.
macOS
A biblioteca kinit Kerberos do sistema suporta Enterprise Principal com a --enterprise opção, mas também implicitamente faz a canonização dos nomes, o que impede o uso de sufixos UPN alternativos. Para usar sufixos UPN alternativos com a autenticação integrada do Microsoft Entra, instale uma biblioteca Kerberos mais recente via brew install krb5 e use o seu kinit com a opção -E conforme descrito acima.