다음을 통해 공유


ODBC 드라이버와 함께 Microsoft Entra ID 사용

ODBC 드라이버 다운로드

참고 항목

Microsoft Entra ID는 Azure AD(Azure Active Directory)의 새 이름이지만, 기존 환경의 중단을 방지하기 위해 UI 필드, 연결 공급자, 오류 코드 및 cmdlet과 같은 일부 하드 코딩된 요소에는 여전히 Azure AD가 남아 있습니다. 이 문서에서는 두 이름을 혼용할 수 있습니다.

목적

Microsoft ODBC Driver for SQL Server 버전 13.1 이상을 사용하면 ODBC 애플리케이션이 Microsoft Entra ID의 ID를 사용하여 Azure SQL 데이터베이스 또는 Azure SQL Managed Instance에 연결할 수 있습니다. 인증은 사용자 이름 및 비밀번호, Microsoft Entra 액세스 토큰, Microsoft Entra 관리 ID(17.3 이상) 또는 페더레이션된 도메인 조인 환경에서 Windows 통합 인증(Linux/macOS의 경우 17.6 이상)으로 수행할 수 있습니다. ODBC 드라이버 버전 13.1의 경우 Microsoft Entra 액세스 토큰 인증은 Windows 전용입니다. ODBC 드라이버 버전 17 이상에서는 모든 플랫폼(Windows, Linux 및 macOS)에서 이 인증을 지원합니다. 다단계 인증을 지원하는 새로운 Microsoft Entra 대화형 인증 방법이 Windows용 ODBC 드라이버 버전 17.1에 도입되었습니다. 시스템 할당 ID와 사용자가 할당한 관리 ID 모두에 대해 새로운 Microsoft Entra 관리 ID 인증 방법이 ODBC 드라이버 버전 17.3.1.1에 추가되었습니다. 이러한 모든 옵션은 새로운 DSN 및 연결 문자열 키워드와 연결 특성을 사용하여 수행할 수 있습니다.

Microsoft Entra 인증을 사용하려면 Azure SQL 데이터 원본을 구성해야 합니다. 자세한 내용은 Azure SQL에서 Microsoft Entra 인증 구성 및 관리를 참조하세요.

참고 항목

버전 17.6 이전 Linux 및 macOS 기반 ODBC 드라이버는 Microsoft Entra ID에 대한 Microsoft Entra 인증만 직접 지원합니다. Linux 또는 macOS 클라이언트에서 Microsoft Entra 사용자 이름/암호 인증을 사용 중이고 Microsoft Entra 구성에서 클라이언트가 Microsoft Entra Federation Services 엔드포인트에 대해 인증해야 하는 경우 인증이 실패할 수 있습니다. 드라이버 버전 17.6부터 이 제한이 제거되었습니다.

새로운 및/또는 수정된 DSN 및 연결 문자열 키워드

Authentication 키워드는 DSN 또는 연결 문자열로 연결할 때 인증 모드를 제어하는 데 사용할 수 있습니다. 연결 문자열에 설정된 값은 제공된 경우 DSN의 값을 재정의합니다. Authentication 설정의 사전 특성 값은 연결 문자열 및 DSN 값에서 계산된 값입니다.

속성 기본 설명
Authentication (설정 안 됨), (빈 문자열), SqlPassword, ActiveDirectoryPassword, ActiveDirectoryIntegrated, ActiveDirectoryInteractive, ActiveDirectoryMsi, ActiveDirectoryServicePrincipal (설정 안 됨) 인증 모드를 제어합니다.
설명
(설정 안 됨)다른 키워드로 결정되는 인증 모드(기존 레거시 연결 옵션.)
(빈 문자열)(연결 문자열만 해당.) DSN에 설정된 Authentication 값을 재정의하고 설정 해제합니다.
SqlPassword사용자 이름 및 비밀번호를 사용하여 SQL에 직접 인증합니다.
ActiveDirectoryPassword사용자 이름 및 비밀번호를 사용하여 Microsoft Entra ID로 인증합니다.
ActiveDirectoryIntegratedWindows 및 Linux/Mac 17.6 이상 드라이버만 해당합니다. 통합 인증을 사용하여 Microsoft Entra ID를 통해 페더레이션된 Windows 자격 증명으로 인증합니다.
ActiveDirectoryInteractiveWindows 드라이버만 해당. 대화형 인증을 사용하여 Microsoft Entra ID로 인증합니다.
ActiveDirectoryMsiMicrosoft Entra 관리 ID를 사용하여 인증. 사용자 할당 ID의 경우 UID를 Azure App Service 또는 Azure Container Instance에 대한 ID의 클라이언트 ID로 설정하고, 그렇지 않으면 해당 개체 ID를 사용합니다. 시스템 할당 ID의 경우 UID가 필요하지 않습니다.
ActiveDirectoryServicePrincipal(17.7+) Microsoft Entra 서비스 주체를 사용하여 인증. UID는 서비스 주체의 클라이언트 ID로 설정됩니다. PWD는 클라이언트 암호로 설정됩니다.
Encrypt (설정 안 됨), Yes/Mandatory(18.0+), No/Optional(18.0+), Strict(18.0+) (설명 참조) 연결의 암호화를 제어합니다. Authentication 설정의 사전 특성 값이 DSN 또는 연결 문자열에서 none이 아닌 경우 기본값은 Yes입니다. 기본값은 버전 18.0.1 이상에도 Yes입니다. 그렇지 않으면 기본값은 No입니다. SQL_COPT_SS_AUTHENTICATION 특성이 사전 특성 값 Authentication을 재정의하는 경우 DSN 또는 연결 문자열 또는 연결 특성에서 암호화 값을 명시적으로 설정합니다. DSN 또는 연결 문자열에서 값이 Yes로 설정된 경우 암호화의 사전 특성 값은 Yes입니다.

새 및/또는 수정된 연결 특성

다음 사전 연결 연결 특성이 도입되었거나 Microsoft Entra 인증을 지원하도록 수정되었습니다. 연결 특성에 해당 연결 문자열 또는 DSN 키워(keyword)드가 있고 설정되어 있는 경우 연결 특성이 우선합니다.

attribute Type 기본 설명
SQL_COPT_SS_AUTHENTICATION SQL_IS_INTEGER (설정 안 됨) 위의 Authentication 키워드에 대한 설명을 참조하세요. SQL_AU_NONE은 DSN 및/또는 연결 문자열에 설정된 Authentication 값을 명시적으로 재정의할 수 있도록 제공되며, SQL_AU_RESET은 특성이 설정된 경우 해당 설정을 해제하여 DSN 또는 연결 문자열 값이 우선적으로 적용되도록 합니다.
SQL_COPT_SS_ACCESS_TOKEN SQL_IS_POINTER ACCESSTOKEN에 대한 포인터 또는 NULL NULL null이 아닌 경우 사용할 Microsoft Entra 액세스 토큰을 지정합니다. 액세스 토큰 및 UID, PWD, Trusted_Connection 또는 Authentication 연결 문자열 키워드 또는 해당 특성을 지정하는 것은 오류입니다.
참고: ODBC 드라이버 버전 13.1은 Windows에서만 이 설정을 지원합니다.
SQL_COPT_SS_ENCRYPT SQL_IS_INTEGER SQL_EN_OFF: SQL_EN_ON (설명 참조) 연결의 암호화를 제어합니다. SQL_EN_OFF는 암호화를 사용하지 않도록 설정하고, SQL_EN_ON는 사용하도록 설정합니다. Authentication 설정의 사전 특성 값이 none이거나 SQL_COPT_SS_ACCESS_TOKEN이 설정되어 있고 DSN 또는 연결 문자열에 Encrypt가 지정되지 않은 경우 기본값은 SQL_EN_ON입니다. 그렇지 않으면 기본값은 SQL_EN_OFF입니다. 연결 특성 SQL_COPT_SS_AUTHENTICATIONnone 이외로 설정된 경우, DSN 또는 연결 문자열에 Encrypt가 지정되지 않으면 명시적으로 SQL_COPT_SS_ENCRYPT를 원하는 값으로 설정합니다. 이 특성의 유효 값은 암호화가 연결에 사용되는지 여부를 제어합니다.
SQL_COPT_SS_OLDPWD - - - Microsoft Entra 주체에 대한 비밀번호 변경은 ODBC 연결을 통해 수행할 수 없으므로 Microsoft Entra ID에서는 지원되지 않습니다.

SQL Server 인증에 대한 비밀번호 만료는 SQL Server 2005에서 도입되었습니다. SQL_COPT_SS_OLDPWD 특성은 클라이언트에서 이전 연결 암호와 새 연결 암호를 모두 제공할 수 있도록 추가되었습니다. 이 속성을 설정하면 변경된 “이전 비밀번호”가 연결 문자열에 포함되기 때문에 공급자가 첫 번째 연결 또는 향후 연결에 연결 풀을 사용하지 않습니다.
SQL_COPT_SS_INTEGRATED_SECURITY SQL_IS_INTEGER SQL_IS_OFF=SQL_IS_ON SQL_IS_OFF 사용되지 않음, 대신 SQL_COPT_SS_AUTHENTICATIONSQL_AU_AD_INTEGRATED로 설정합니다.

서버 로그인 시 액세스 유효성 검사를 위해 Windows 인증(Linux 및 macOS의 Kerberos)을 강제로 사용합니다. Windows 인증을 사용하는 경우 드라이버는 SQLConnect, SQLDriverConnect 또는 SQLBrowseConnect 처리의 일부로 제공된 사용자 식별자 및 비밀번호 값을 무시합니다.

Microsoft Entra ID에 대한 UI 추가(Windows 드라이버만 해당)

드라이버의 DSN 설정 및 연결 UI가 Microsoft Entra ID로 인증하는 데 필요한 추가 옵션으로 향상되었습니다.

UI에서 DSN 만들기 및 편집

드라이버의 설치 UI를 사용하여 기존 DSN을 만들거나 편집할 때 Microsoft Entra 인증 옵션을 사용할 수 있습니다.

Azure SQL에 대한 Microsoft Entra 통합 인증을 위한 Authentication=ActiveDirectoryIntegrated

Microsoft Entra 통합 인증이 선택된 DSN 생성 및 편집 화면.

Azure SQL에 대한 Microsoft Entra 사용자 이름/암호 인증을 위한 Authentication=ActiveDirectoryPassword

Microsoft Entra 암호 인증이 선택된 DSN 만들기 및 편집 화면입니다.

Azure SQL에 대한 Microsoft Entra 대화형 인증을 위한 Authentication=ActiveDirectoryInteractive

Microsoft Entra 대화형 인증이 선택된 DSN 생성 및 편집 화면.

참고 항목

드라이버 버전 17.9를 기준으로 대화형 인증 동작이 변경되었습니다. 드라이버에 유효한 액세스 토큰이 캐시되지 않는 한 사용자에게 자격 증명을 묻는 메시지가 항상 표시됩니다. 이렇게 변경하면 Microsoft Entra 조인된 디바이스의 사용자가 ActiveDirectoryInteractive 인증을 사용할 때 프롬프트를 건너뛰고 캐시된 자격 증명을 사용하여 자동으로 로그인하는 것을 방지할 수 있습니다.

SQL Server 및 Azure SQL의 사용자 이름/암호 인증을 위한 Authentication=SqlPassword

SQL Server 인증이 선택된 DSN 만들기 및 편집 화면입니다.

Trusted_Connection=Yes - Windows 레거시 SSPI 통합 인증

통합 Windows 인증이 선택된 DSN 생성 및 편집 화면.

Microsoft Entra 관리 ID 인증을 위한 Authentication=ActiveDirectoryMsi

관리 서비스 ID 인증이 선택된 DSN 만들기 및 편집 화면입니다.

Microsoft Entra 보안 주체 인증을 위한 Authentication=ActiveDirectoryServicePrincipal

Microsoft Entra 서비스 주체 인증이 선택된 DSN 만들기 및 편집 화면입니다.

이 7가지 옵션은 Trusted_Connection=Yes(기존 레거시 Windows SSPI 전용 통합 인증) 및 Authentication= ActiveDirectoryIntegrated, SqlPassword, ActiveDirectoryPassword, ActiveDirectoryInteractive, ActiveDirectoryMsi, 그리고 ActiveDirectoryServicePrincipal에 각각 해당합니다.

SQLDriverConnect 프롬프트(Windows 드라이버만 해당)

연결을 완료하는 데 필요한 정보를 요청할 때 SQLDriverConnect가 표시하는 프롬프트 대화 상자에는 Microsoft Entra 인증을 위한 다음의 네 가지 새로운 옵션이 포함되어 있습니다.

SQLDriverConnect에서 표시하는 SQL Server 로그인 대화 상자입니다.

이러한 옵션은 위의 DSN 설정 UI에서 사용할 수 있는 동일한 6개 옵션에 해당합니다.

연결 문자열 예

  1. SQL Server 인증 - 레거시 구문. 서버 인증서의 유효성은 확인되지 않았으며, 암호화는 서버에서 적용하는 경우에만 사용됩니다. 사용자 이름/비밀번호가 연결 문자열 전달됩니다.

    server=Server;database=Database;UID=UserName;PWD=<password>;Encrypt=no;TrustServerCertificate=yes;

  2. SQL 인증 - 새 구문. 클라이언트는 암호화를 요청하고(Encrypt의 기본값은 true) 암호화 설정에 관계없이 서버 인증서의 유효성을 검사합니다(TrustServerCertificatetrue로 설정된 경우 제외). 사용자 이름/비밀번호가 연결 문자열 전달됩니다.

    server=Server;database=Database;UID=UserName;PWD=<password>;Authentication=SqlPassword;

  3. SSPI를 사용하는 Windows 통합 인증(Linux 및 macOS의 Kerberos)(SQL Server 또는 SQL IaaS로) - 현재 구문. 서버에서 암호화를 요구하지 않는 한 서버 인증서의 유효성이 검사되지 않습니다.

    server=Server;database=Database;Trusted_Connection=yes;Encrypt=no;

  4. (Windows 드라이버만 해당.) SSPI를 사용하는 Windows 통합 인증(대상 데이터베이스가 SQL Server 또는 Azure VM 기반 SQL Server에 있는 경우) - 새 구문. 클라이언트는 암호화를 요청하고(Encrypt의 기본값은 true) 암호화 설정에 관계없이 서버 인증서의 유효성을 검사합니다(TrustServerCertificatetrue로 설정된 경우 제외).

    server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;

  5. Microsoft Entra 사용자 이름/암호 인증(대상 데이터베이스가 Azure SQL Database 또는 Azure SQL Managed Instance에 있는 경우). 암호화 설정에 관계없이 서버 인증서의 유효성을 검사합니다(TrustServerCertificatetrue로 설정한 경우 제외). 사용자 이름/비밀번호가 연결 문자열 전달됩니다.

    server=Server;database=Database;UID=UserName;PWD=<password>;Authentication=ActiveDirectoryPassword;Encrypt=yes;

  6. (Windows 및 Linux/macOS 17.6 이상, 드라이버만 해당). 대상 데이터베이스가 Azure SQL에 있다고 가정하여 Microsoft Entra 액세스 토큰에 Windows 계정 자격 증명을 사용하는 ADAL 또는 Kerberos를 사용하는 통합 Windows 인증입니다. 암호화 설정에 관계없이 서버 인증서의 유효성을 검사합니다(TrustServerCertificatetrue로 설정한 경우 제외). Linux/macOS의 경우 적합한 Kerberos 티켓을 사용할 수 있어야 합니다. 자세한 내용은 페더레이션 계정 및 통합 인증 사용에 대한 아래 섹션을 참조하세요.

    server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;Encrypt=yes;

  7. (Windows 드라이버만 해당.) Microsoft Entra 대화형 인증은 Microsoft Entra 다단계 인증 기술을 사용하여 연결을 설정합니다. 이 모드에서는 로그인 ID를 제공하면 Azure 인증 대화 상자가 트리거되고 사용자가 추가 확인을 입력하여 연결을 완료할 수 있습니다. 사용자 이름이 연결 문자열 전달됩니다.

    server=Server;database=Database;UID=UserName;Authentication=ActiveDirectoryInteractive;Encrypt=yes;

    Active Directory 대화형 인증을 사용하는 경우 Microsoft Azure 인증 UI.

  8. Microsoft Entra 관리 ID 인증은 시스템 할당 또는 사용자가 할당한 관리 ID를 사용할 수 있습니다. 사용자 할당 ID의 경우 UID를 Azure App Service 또는 Azure Container Instance에 대한 ID의 클라이언트 ID로 설정하고, 그렇지 않으면 해당 개체 ID를 사용합니다. 시스템 할당 ID의 경우 UID가 필요하지 않습니다.

    시스템 할당 ID의 경우:

    server=Server;database=Database;Authentication=ActiveDirectoryMsi;Encrypt=yes;

    개체 ID가 myObjectId와 동일한 사용자 할당 ID의 경우:

    server=Server;database=Database;UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;

  9. Microsoft Entra 서비스 주체 인증

server=Server;database=Database;UID=clientId;PWD=<password>;Authentication=ActiveDirectoryServicePrincipal;Encrypt=yes;

설명

  • Microsoft Entra 옵션을 17.4.2 이전 버전의 Windows ODBC 드라이버에서 사용하는 경우 SQL Server용 Active Directory 인증 라이브러리를 설치했는지 확인합니다. Linux 및 macOS 드라이버를 사용하는 경우 libcurl가 설치되어 있는지 확인합니다. 드라이버 버전 17.2 이상에서는 다른 인증 방법 또는 ODBC 작업에는 필요하지 않으므로 명시적 종속성이 아닙니다.

  • Microsoft Entra 구성에 조건부 액세스 정책이 포함되어 있고 클라이언트가 Windows 10 또는 Server 2016 이상인 경우 통합 또는 사용자 이름/비밀번호를 통한 인증이 실패할 수 있습니다. 조건부 액세스 정책에는 Windows용 드라이버 버전 17.6 이상에서 지원되는 WAM(웹 계정 관리자)을 사용해야 합니다. WAM을 사용하려면 각각 글로벌, 사용자 DSN 또는 시스템 DSN 범위 구성에 대해 ADALuseWAM, HKLM\Software\ODBC\ODBCINST.INI\ODBC Driver 17 for SQL Server 또는 HKCU\Software\ODBC\ODBC.INI\<your-user-DSN-name>HKLM\Software\ODBC\ODBC.INI\<your-system-DSN-name>이라는 문자열 값을 새로 만들고 이 값을 1로 설정합니다. WAM을 사용한 인증은 runas를 사용하여 다른 사용자로 애플리케이션을 실행하는 기능을 지원하지 않는다는 점에 유의하세요. 조건부 액세스 정책이 필요한 시나리오는 Linux 또는 macOS에서 지원되지 않습니다.

  • 이제 SQL Server 계정 사용자 이름 및 비밀번호를 사용하여 연결하려면 새로운 SqlPassword 옵션을 사용할 수 있으며, 이 옵션을 사용하면 연결 기본값을 보다 안전하게 설정할 수 있으므로 특히 Azure SQL에 권장됩니다.

  • Microsoft Entra 계정 사용자 ID와 비밀번호를 사용하여 연결하려면 연결 문자열에 Authentication=ActiveDirectoryPassword를 지정하고 사용자 ID와 비밀번호에 각각 UIDPWD 키워드를 지정합니다.

  • Windows 통합 인증 또는 Microsoft Entra 통합(Windows 및 Linux/macOS 17.6 이상, 드라이버 전용) 인증을 사용하여 연결하려면 연결 문자열에 Authentication=ActiveDirectoryIntegrated를 지정합니다. 드라이버가 자동으로 올바른 인증 모드를 선택합니다. 드라이버 버전 17.7 이하의 경우 UIDPWD를 지정하지 않아야 합니다. 드라이버 버전 17.8부터는 UIDPWD가 무시됩니다.

  • Microsoft Entra 대화형 인증(Windows 드라이버만 해당)을 사용하여 연결하려면 UID를 지정해야 합니다. 드라이버 버전 17.7 이하의 경우 PWD를 지정하지 않아야 합니다. 드라이버 버전 17.8부터는 PWD가 무시됩니다.

  • 버전 18.1부터 Trusted_Connection=Yes는 더 이상 기본적으로 Microsoft Entra ID 페더레이션 인증을 사용하지 않으며 대신 SSPI 통합을 사용합니다. 이 옵션에 Microsoft Entra ID를 사용하려면 TrustedConnection_UseAAD=Yes를 구성해야 합니다.

  • ODBC 드라이버 버전 17.7 이하에서는 MICROSOFT Entra 인증 및 강제 암호화가 SQL Server 인스턴스에서 사용하도록 설정된 경우 연결 시간 제한에 대해 알려진 문제가 있습니다. SQL Server 오류 로그에는 “오류: 33155, 심각도: 20, 상태: 1. 서버가 페더레이션 인증 토큰을 기다리는 동안 연결 끊기 이벤트가 발생했습니다. 이 오류는 클라이언트가 닫혔거나 서버 시간 제한이 만료되었기 때문에 발생했을 수 있습니다.”와 같은 오류 메시지가 포함될 수 있습니다. Always On 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스와 같은 고가용성 솔루션을 사용하는 경우 SQL Server에 대한 내부 클러스터 통신은 리소스 가용성에 영향을 줄 수 있는 이 동작의 영향을 받을 수 있습니다. 클러스터 로그에 [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)와 같은 오류 메시지가 표시될 수 있습니다. ODBC 드라이버 버전 17.10 이상에서는 이 문제가 해결되었으며, SQL Server 2022 GDR KB5021522 /CU1 KB5022375에서는 이 수정 사항이 포함된 최신 드라이버가 SQL Server 설치 프로그램과 함께 설치됩니다. 사용자는 ODBC 데이터 원본 관리자를 참조하여 설치한 ODBC 드라이버의 버전을 확인할 수 있습니다.

  • ODBC 드라이버 버전 18.3부터 Azure Arc 및 Azure Cloud Shell에서 관리 ID(ActiveDirectoryMSI) 인증이 지원됩니다.

액세스 토큰을 사용하여 인증

SQL_COPT_SS_ACCESS_TOKEN 사전 연결 특성을 사용하면 사용자 이름 및 암호 대신 Microsoft Entra ID에서 가져온 액세스 토큰을 인증에 사용할 수 있으며 드라이버의 액세스 토큰 협상 및 가져오기도 바이패스합니다. 액세스 토큰을 사용하려면 SQL_COPT_SS_ACCESS_TOKEN 연결 특성을 ACCESSTOKEN 구조에 대한 포인터로 설정합니다

typedef struct AccessToken
{
    DWORD dataSize;
    BYTE data[];
} ACCESSTOKEN;

ACCESSTOKEN은 4바이트 길이와 액세스 토큰을 구성하는 불투명 데이터의 길이 바이트가 뒤따르는 가변 길이 구조입니다. SQL Server가 액세스 토큰을 처리하는 방식으로 인해 OAuth 2.0 JSON 응답을 통해 얻은 액세스 토큰은 각 바이트 뒤에 0 패딩 바이트가 오도록 확장해야 하며, 이는 ASCII 문자만 포함된 UCS-2 문자열과 유사합니다. 그러나 토큰은 불투명 값이며 지정된 길이(바이트)는 null 종결자를 포함하지 않아야 합니다. 이 인증 방법은 상당한 길이와 형식 제약 조건 때문에 SQL_COPT_SS_ACCESS_TOKEN 연결 특성을 통해 프로그래밍 방식으로만 사용할 수 있습니다. 해당하는 DSN 또는 연결 문자열 키워드가 없습니다. 연결 문자열에 UID, PWD, Authentication 또는 Trusted_Connection 키워드가 포함되어서는 안 됩니다.

참고 항목

ODBC 드라이버 버전 13.1은 Windows에서만 이 인증을 지원합니다. 후속 버전은 모든 플랫폼에서 이 인증을 지원합니다.

Microsoft Entra 인증 샘플 코드

다음 샘플은 연결 키워드와 함께 Microsoft Entra ID를 사용하여 SQL Server에 연결하는 데 필요한 코드를 보여줍니다. 애플리케이션 코드 자체는 변경할 필요가 없습니다. 연결 문자열 또는 사용되는 경우 DSN이 Microsoft Entra ID를 인증에 사용하는 데 필요한 유일한 수정 사항입니다.

    ...
    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);
    ...

다음 샘플은 Microsoft Entra 액세스 토큰 인증을 사용하여 SQL Server에 연결하는 데 필요한 코드를 보여줍니다. 이 경우 액세스 토큰을 처리하고 연결된 연결 특성을 설정하도록 애플리케이션 코드를 수정해야 합니다.

    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);

다음 샘플 연결 문자열은 Microsoft Entra 대화형 인증에 사용하기 위한 것입니다. Azure 인증 화면에서 비밀번호를 입력하기 때문에 PWD 필드가 포함되어 있지 않습니다.

SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;Authentication=ActiveDirectoryInteractive;Encrypt=yes;"

Microsoft Entra 관리 ID 인증에 사용하기 위한 샘플 연결 문자열은 다음과 같습니다. 사용자 할당 ID를 사용하는 경우 UID는 사용자 ID의 개체/클라이언트 ID로 설정됩니다.

// 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;"

Linux/macOS에서 ADFS 페더레이션 계정 사용 시 고려 사항

버전 17.6부터 Linux 및 macOS용 드라이버는 사용자 이름/비밀번호(ActiveDirectoryPassword) 또는 Kerberos(ActiveDirectoryIntegrated)를 사용하여 Microsoft Entra ADFS 페더레이션 계정을 사용한 인증을 지원합니다. 통합 모드를 사용하는 경우 플랫폼에 따라 몇 가지 제한 사항이 있습니다.

UPN 접미사가 Kerberos 영역과 다른 사용자, 즉 대체 UPN 접미사를 사용하는 사용자를 인증하는 경우 Kerberos 티켓을 획득할 때 엔터프라이즈 보안 주체 옵션(-E 옵션에 kinit를 사용하고, 보안 주체 이름을 user@federated-domain 형식으로 제공)을 사용해야 합니다. 이러한 방식으로 드라이버는 페더레이션된 도메인 및 Kerberos 영역을 모두 올바르게 결정할 수 있습니다.

klist 명령의 출력을 검사하여 적합한 Kerberos 티켓을 사용할 수 있는지 확인할 수 있습니다. 페더레이션 도메인이 Kerberos 영역 및 UPN 접미사와 동일한 경우, 보안 주체 이름은 user@realm 형식입니다. 다른 경우 보안 주체 이름은 user@federated-domain@realm 형식이어야 합니다.

Linux

SUSE 11에서 1.6.x의 기본 Kerberos 라이브러리 버전은 대체 UPN 접미사를 사용하는 데 필요한 엔터프라이즈 보안 주체 옵션을 지원하지 않습니다. Microsoft Entra 통합 인증에서 대체 UPN 접미사를 사용하려면 Kerberos 라이브러리를 1.7 이상으로 업그레이드합니다.

Alpine Linux에서 기본 libcurl은 Microsoft Entra 통합 인증에 필요한 SPNEGO/Kerberos 인증을 지원하지 않습니다.

macOS

시스템 Kerberos 라이브러리 kinit--enterprise 옵션으로 엔터프라이즈 보안 주체를 지원하지만 이름 정규화를 암시적으로 지원하므로 대체 UPN 접미사를 사용할 수 없습니다. Microsoft Entra 통합 인증에 대체 UPN 접미사를 사용하려면 brew install krb5를 통해 최신 Kerberos 라이브러리를 설치하고 위에서 설명한 대로 kinit-E 옵션으로 사용합니다.