Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia administrada de Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Punto de conexión de SQL Analytics en Microsoft Fabric
Almacén en Microsoft Fabric
Base de datos SQL en Microsoft Fabric
Propósito
A partir de la versión 18.2.1, Microsoft OLE DB Driver for SQL Server permite que las aplicaciones OLE DB se conecten a la base de datos de Azure SQL, Azure SQL Managed Instance, Azure Synapse Analytics y Microsoft Fabric mediante una identidad federada.
Los métodos de autenticación de Microsoft Entra son:
- Nombre de usuario y contraseña
- Token de acceso
- Autenticación integrada
La versión 18.3.0 agrega compatibilidad con los siguientes métodos de autenticación de Microsoft Entra:
Autenticación interactiva
Autenticación de identidad administrada (solo desde una máquina virtual de Azure configurada para identidad administrada)
La versión 18.5.0 agrega compatibilidad con los siguientes métodos de autenticación:
- Autenticación del principal de servicio de Microsoft Entra
Nota:
No se admite el uso de los siguientes modos de autenticación con DataTypeCompatibility (o su propiedad correspondiente) configurada en 80no admitido.
- Autenticación de Microsoft Entra mediante el nombre de usuario y la contraseña
- Autenticación de Microsoft Entra mediante token de acceso
- Autenticación integrada de Microsoft Entra
- Autenticación interactiva de Microsoft Entra
- Autenticación de identidades administradas de Microsoft Entra
- Autenticación del principal de servicio de Microsoft Entra
Para usar la autenticación de Microsoft Entra, debes configurar el origen de datos de Azure SQL. Para obtener más información, consulte Configuración y administración de la autenticación de Microsoft Entra con Azure SQL.
Palabras clave de cadena de conexión y propiedades
Se han agregado las siguientes palabras clave de cadena de conexión para admitir la autenticación de Microsoft Entra:
| Palabra clave de cadena de conexión | Propiedad de Conexión | Descripción |
|---|---|---|
| Token de acceso | SSPROP_AUTH_ACCESS_TOKEN |
Especifica un token de acceso para autenticarse en microsoft Entra ID. |
| Autenticación | SSPROP_AUTH_MODE |
Especifica el método de autenticación que se va a utilizar. |
Para más información sobre las nuevas palabras clave y propiedades, consulte:
- Uso de palabras clave de cadena de conexión con el controlador OLE DB para SQL Server
- Propiedades de inicialización y autorización
Cifrado y validación de certificados
Consulte Cifrado y validación de certificados para obtener más información.
Adiciones de GUI
La interfaz gráfica de usuario del driver se ha mejorado para permitir la autenticación de Microsoft Entra. Para más información, vea:
- Cuadro de diálogo de inicio de sesión de SQL Server
- Configuración de vínculo de datos universal (UDL)
Ejemplos de cadena de conexión
En esta sección se muestran ejemplos de palabras clave de cadena de conexión nuevas y existentes que se van a utilizar con IDataInitialize::GetDataSource y la propiedad DBPROP_INIT_PROVIDERSTRING.
Autenticación SQL
- Usando
IDataInitialize::GetDataSource- Nuevo:
Provider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=SqlPassword; User ID=[username]; Password=[password]; Uso del cifrado para Data=Obligatorio
- En desuso:
Provider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; User ID=[username]; Password=[password]; Uso del cifrado para Data=Obligatorio
- Nuevo:
- Usando
DBPROP_INIT_PROVIDERSTRING- Nuevo:
Server=[server];Database=[database];Authentication=SqlPassword;UID=[username];PWD=[password];Encrypt=Mandatory
- En desuso:
Server=[server];Database=[database];UID=[username];PWD=[password];Encrypt=Mandatory
- Nuevo:
Autenticación integrada de Windows mediante la interfaz del proveedor de compatibilidad para seguridad (SSPI)
- Usando
IDataInitialize::GetDataSource- Nuevo:
Provider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Uso del cifrado para Data=Obligatorio
- En desuso:
Provider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Integrated Security=SSPI; Uso del cifrado para Data=Obligatorio
- Nuevo:
- Usando
DBPROP_INIT_PROVIDERSTRING- Nuevo:
Server=[server];Database=[database];Autenticación=ActiveDirectoryIntegrated;Cifrar=Obligatorio
- En desuso:
Server=[server];Database=[database];Trusted_Connection=yes;Encrypt=Obligatorio
- Nuevo:
Autenticación de nombre de usuario y contraseña de Microsoft Entra
Importante
La opción de autenticación ActiveDirectoryPassword (autenticación con contraseña Microsoft Entra ID) está en desuso en los controladores sql de Microsoft. Este flujo de autenticación de alto riesgo no es compatible con la autenticación multifactor (MFA) obligatoria Microsoft Entra y es posible que no funcione en inquilinos en los que se aplica MFA. Planee la migración a un método de autenticación de Microsoft Entra diferente.
La autenticación mediante contraseña de Microsoft Entra ID se basa en la concesión de credenciales de contraseña del propietario del recurso (ROPC) de OAuth 2.0, que permite a una aplicación iniciar la sesión del usuario mediante la administración directa de su contraseña.
Microsoft recomienda no usar el flujo ROPC porque no es compatible con MFA. En la mayoría de los escenarios, hay alternativas más seguras disponibles y recomendadas. Este flujo requiere un alto grado de confianza en la aplicación y conlleva riesgos que no están presentes en otros flujos. Use este flujo solo cuando los flujos más seguros no sean viables. Microsoft se aleja de este flujo de autenticación de alto riesgo para proteger a los usuarios frente a ataques malintencionados. Para más información, consulte Planeamiento de la autenticación multifactor obligatoria para Azure.
Cuando un usuario está presente al iniciar sesión, use la autenticación ActiveDirectoryInteractive o ActiveDirectoryIntegrated para que el registro de auditoría se atribuya al usuario que ha iniciado sesión y se apliquen las directivas de Acceso condicional.
Para escenarios de servicio a servicio sin supervisión, siga las directrices sobre cuentas de servicio de Microsoft Entra:
- Si la aplicación se ejecuta en la infraestructura de Azure, use ActiveDirectoryMSI (o ActiveDirectoryManagedIdentity en algunos controladores). Las identidades administradas eliminan la sobrecarga de mantener y rotar secretos y certificados.
- Si la identidad administrada no está disponible (por ejemplo, la aplicación se ejecuta fuera de Azure), use ActiveDirectoryServicePrincipal. Cuando el controlador lo admita, prefiera un certificado de cliente sobre un secreto de cliente. Con un certificado, la clave privada permanece en el cliente y solo se envía una aserción firmada a Microsoft Entra para autenticar al cliente. Si la clave se almacena en hardware (por ejemplo, en un TPM o un HSM) o está marcada como no exportable, no puede copiarse como una cadena del mismo modo que sí puede hacerse con un secreto de cliente.
- No use una cuenta de usuario de Microsoft Entra como cuenta de servicio.
- Usando
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryPassword; User ID=[username]; Password=[password]; Uso del cifrado para Data=Obligatorio
- Usando
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Authentication=ActiveDirectoryPassword;UID=[username];PWD=[password];Encrypt=Mandatory
Autenticación integrada de Microsoft Entra
- Usando
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Uso del cifrado para Data=Obligatorio
- Usando
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Autenticación=ActiveDirectoryIntegrated;Cifrar=Obligatorio
Autenticación de Microsoft Entra mediante un token de acceso
- Usando
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Access Token=[access token];Uso de cifrado para los datos=Obligatorio
- Usando
DBPROP_INIT_PROVIDERSTRINGno se admite el suministro del token de acceso a través de
DBPROP_INIT_PROVIDERSTRING
Autenticación interactiva de Microsoft Entra
- Usando
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryInteractive; User ID=[username]; Uso del cifrado para Data=Obligatorio
- Usando
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Authentication=ActiveDirectoryInteractive;UID=[username];Encrypt=Mandatory
Autenticación de identidad gestionada por Microsoft Entra
- Usando
IDataInitialize::GetDataSource- Identidad administrada asignada por el usuario:
Provider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; User ID=[Object ID]; Uso del cifrado para Data=Obligatorio
- Identidad administrada asignada por el sistema:
Provider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Uso del cifrado para Data=Obligatorio
- Identidad administrada asignada por el usuario:
- Usando
DBPROP_INIT_PROVIDERSTRING- Identidad administrada asignada por el usuario:
Server=[server]; Database=[database]; Authentication=ActiveDirectoryMSI; UID=[Id. de objeto]; Encrypt=Obligatorio
- Identidad administrada asignada por el sistema:
Server=[server];Database=[database];Authentication=ActiveDirectoryMSI;Encrypt=Mandatory
- Identidad administrada asignada por el usuario:
Autenticación del principal de servicio de Microsoft Entra
- Usando
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19; Origen de datos=[servidor]; Initial Catalog=[database]; Authentication=ActiveDirectoryServicePrincipal; User ID=[Application (client) ID]; Password=[Secreto de aplicación (cliente)]; Uso del cifrado para Data=Obligatorio
- Usando
DBPROP_INIT_PROVIDERSTRINGServer=[server]; Database=[database]; Authentication=ActiveDirectoryServicePrincipal; UID=[Id. de aplicación (cliente)]; PWD=[Secreto de aplicación (cliente)]; Encrypt=Obligatorio
Ejemplos de código
En los siguientes ejemplos se muestra el código necesario para conectarse a Microsoft Entra ID con palabras clave de conexión.
Token de acceso
#include <string>
#include <iostream>
#include <msdasc.h>
int main()
{
wchar_t azureServer[] = L"server";
wchar_t azureDatabase[] = L"mydatabase";
wchar_t accessToken[] = L"eyJ0eXAiOi...";
IDBInitialize *pIDBInitialize = nullptr;
IDataInitialize* pIDataInitialize = nullptr;
HRESULT hr = S_OK;
CoInitialize(nullptr);
// Construct the connection string.
std::wstring connString = L"Provider=MSOLEDBSQL19;Data Source=" + std::wstring(azureServer) + L";Initial Catalog=" +
std::wstring(azureDatabase) + L";Access Token=" + accessToken + L";Use Encryption for Data=Mandatory;";
hr = CoCreateInstance(CLSID_MSDAINITIALIZE, nullptr, CLSCTX_INPROC_SERVER,
IID_IDataInitialize, reinterpret_cast<LPVOID*>(&pIDataInitialize));
if (FAILED(hr))
{
std::cout << "Failed to create an IDataInitialize instance." << std::endl;
goto Cleanup;
}
hr = pIDataInitialize->GetDataSource(nullptr, CLSCTX_INPROC_SERVER, connString.c_str(),
IID_IDBInitialize, reinterpret_cast<IUnknown**>(&pIDBInitialize));
if (FAILED(hr))
{
std::cout << "Failed to get data source object." << std::endl;
goto Cleanup;
}
hr = pIDBInitialize->Initialize();
if (FAILED(hr))
{
std::cout << "Failed to establish connection." << std::endl;
goto Cleanup;
}
Cleanup:
if (pIDBInitialize)
{
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
}
if (pIDataInitialize)
{
pIDataInitialize->Release();
}
CoUninitialize();
}
Integrado en Active Directory
#include <string>
#include <iostream>
#include <msdasc.h>
int main()
{
wchar_t azureServer[] = L"server";
wchar_t azureDatabase[] = L"mydatabase";
IDBInitialize *pIDBInitialize = nullptr;
IDataInitialize* pIDataInitialize = nullptr;
HRESULT hr = S_OK;
CoInitialize(nullptr);
// Construct the connection string.
std::wstring connString = L"Provider=MSOLEDBSQL19;Data Source=" + std::wstring(azureServer) + L";Initial Catalog=" +
std::wstring(azureDatabase) + L";Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory;";
hr = CoCreateInstance(CLSID_MSDAINITIALIZE, nullptr, CLSCTX_INPROC_SERVER,
IID_IDataInitialize, reinterpret_cast<LPVOID*>(&pIDataInitialize));
if (FAILED(hr))
{
std::cout << "Failed to create an IDataInitialize instance." << std::endl;
goto Cleanup;
}
hr = pIDataInitialize->GetDataSource(nullptr, CLSCTX_INPROC_SERVER, connString.c_str(),
IID_IDBInitialize, reinterpret_cast<IUnknown**>(&pIDBInitialize));
if (FAILED(hr))
{
std::cout << "Failed to get data source object." << std::endl;
goto Cleanup;
}
hr = pIDBInitialize->Initialize();
if (FAILED(hr))
{
std::cout << "Failed to establish connection." << std::endl;
goto Cleanup;
}
Cleanup:
if (pIDBInitialize)
{
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
}
if (pIDataInitialize)
{
pIDataInitialize->Release();
}
CoUninitialize();
}
Contenido relacionado
Obtén información sobre la autenticación de Microsoft Entra en SQL Server.
Configuración de las conexiones de controlador mediante palabras clave de cadena de conexión que el controlador OLE DB admite.