SQL Server 커넥터 유지 관리 및 문제 해결

적용 대상:SQL Server

이 문서는 SQL Server 커넥터에 대한 추가 정보를 제공합니다. SQL Server 커넥터에 대한 자세한 내용은 Azure Key Vault(SQL Server)를 사용한 확장 가능한 키 관리, Azure Key Vault를 사용한 확장 가능한 키 관리를 위한 설정 단계SQL 암호화 기능과 함께 SQL Server 커넥터 사용을 참조하세요.

참고 항목

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

A. SQL Server 커넥터에 대한 유지 관리 지침

키 롤오버

Important

  • SQL Server 커넥터는 “a-z”, “A-Z”, “0-9” 및 “-” 문자만 키 이름에 사용할 수 있으며, 키 이름은 26자로 제한됩니다. Azure Key Vault에서 동일한 키 이름 아래의 다른 키 버전은 SQL Server 커넥터에서 작동하지 않습니다. SQL Server에서 사용되는 Azure Key Vault 키를 전환하려면 새 키 이름을 사용하는 새 키를 만들어야 합니다.
  • 키 버전을 순환하는 경우에는 원래 데이터베이스 암호화에 사용된 버전을 비활성화하지 않아야 합니다. SQL Server는 원래 버전이 활성화될 때까지 '복구 보류 중' 상태로 작동을 멈추고 암호화 예외 메모리 덤프를 생성할 수 있으므로 데이터베이스를 복구할 수 없습니다.

일반적으로 SQL Server 암호화에 사용되는 서버 비대칭 키의 경우 1~2년마다 버전을 관리해야 합니다. 키 자격 증명 모음에서 키를 버전 관리할 수 있지만 고객이 이 기능을 사용하여 버전 관리를 구현해서는 안 된다는 점을 유의해야 합니다. SQL Server 커넥터는 키 자격 증명 모음 키 버전의 변경 사항을 처리할 수 없습니다. 키 버전 관리를 구현하려면 키 자격 증명 모음에서 새 키를 만든 다음 Management Studio에서 데이터 암호화 키를 다시 암호화합니다.

TDE에서 이를 수행하기 위한 방법은 다음과 같습니다.

  • PowerShell: 키 자격 증명 모음에서 새 비대칭 키(현재 TDE 비대칭 키와 다른 이름)를 만듭니다.

    Add-AzKeyVaultKey -VaultName 'ContosoDevKeyVault' `
      -Name 'Key2' -Destination 'Software'
    
  • Management Studio 또는 sqlcmd.exe 사용: 3단계 섹션 3에 표시된 대로 다음 문을 사용합니다.

    새 비대칭 키를 가져옵니다.

    USE master
    CREATE ASYMMETRIC KEY [MASTER_KEY2]
    FROM PROVIDER [EKM]
    WITH PROVIDER_KEY_NAME = 'Key2',
    CREATION_DISPOSITION = OPEN_EXISTING
    GO
    

    TDE 지침과 같이 새 비대칭 키와 연결할 새 로그인을 만듭니다.

    USE master
    CREATE LOGIN TDE_Login2
    FROM ASYMMETRIC KEY [MASTER_KEY2]
    GO
    

    로그인에 매핑할 새 자격 증명을 만듭니다.

    CREATE CREDENTIAL Azure_EKM_TDE_cred2
        WITH IDENTITY = 'ContosoDevKeyVault',
       SECRET = 'EF5C8E094D2A4A769998D93440D8115DAADsecret123456789='
    FOR CRYPTOGRAPHIC PROVIDER EKM;
    
    ALTER LOGIN TDE_Login2
    ADD CREDENTIAL Azure_EKM_TDE_cred2;
    GO
    

    데이터베이스 암호화 키를 다시 암호화할 데이터베이스를 선택합니다.

    USE [database]
    GO
    

    데이터베이스 암호화 키를 다시 암호화합니다.

    ALTER DATABASE ENCRYPTION KEY
    ENCRYPTION BY SERVER ASYMMETRIC KEY [MASTER_KEY2];
    GO
    

SQL Server 커넥터 업그레이드

1.0.0.440 이전 버전은 교체되었으며 프로덕션 환경에서는 더 이상 지원되지 않습니다. 프로덕션 환경에서는 1.0.1.0 이상 버전이 지원됩니다. Microsoft 다운로드 센터에서 최신 버전으로 업그레이드하려면 다음 지침을 따릅니다.

업그레이드

  1. SQL Server 구성 관리자를 사용하여 SQL Server 서비스를 중지합니다.
  2. 제어 패널\프로그램\프로그램 및 기능을 사용하여 이전 버전을 제거합니다.
    1. 애플리케이션 이름: Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터
    2. 버전: 15.0.300.96(또는 이전)
    3. DLL 파일 날짜: 2018/01/30(또는 이전)
  3. 새 Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터 설치(업그레이드)
    1. 버전: 15.0.2000.440
    2. DLL 파일 날짜: 2020/09/11
  4. SQL Server 서비스를 시작합니다.
  5. 암호화된 데이터베이스 테스트 액세스 가능

롤백

  1. SQL Server 구성 관리자를 사용하여 SQL Server 서비스를 중지합니다.

  2. 제어 패널\프로그램\프로그램 및 기능을 사용하여 새 버전을 제거합니다.

    1. 애플리케이션 이름: Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터
    2. 버전: 15.0.2000.440
    3. DLL 파일 날짜: 2020/11/24
  3. 이전 버전의 Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터 설치

    1. 버전: 15.0.300.96
    2. DLL 파일 날짜: 2018/01/30
  4. SQL Server 서비스를 시작합니다.

  5. TDE를 사용하는 데이터베이스에 액세스할 수 있는지 확인

  6. 업데이트가 작동하는지 확인한 후 이전 SQL Server 커넥터 폴더를 삭제할 수 있습니다(3단계에서 제거하는 대신 이름을 바꾸기로 선택한 경우).

이전 버전의 SQL Server 커넥터

이전 버전의 SQL Server 커넥터 딥 링크

SQL Server 서비스 주체 롤링

SQL Server는 Microsoft Entra ID(이전 Azure Active Directory)에서 만든 서비스 주체를 키 자격 증명 모음에 액세스하는 자격 증명으로 사용합니다. 서비스 주체에는 클라이언트 ID 및 인증 키가 있습니다. SQL Server 자격 증명은 VaultName, 클라이언트 ID인증 키로 설정됩니다. 인증 키는 특정 기간(1년 또는 2년)동안 유효합니다. 기간이 만료되기 전에 서비스 주체에 대한 Microsoft Entra ID에서 새 키를 생성해야 합니다. 그런 다음 SQL Server에서 자격 증명을 변경해야 합니다. Management Studio는 현재 세션에서 자격 증명에 대한 캐시를 유지 관리하므로 자격 증명이 변경되면 Management Studio를 다시 시작해야 합니다.

키 백업 및 복구

키 자격 증명 모음은 정기적으로 백업해야 합니다. 자격 증명 모음의 비대칭 키가 손실되면 백업에서 복원할 수 있습니다. 키는 이전과 동일한 이름을 사용하여 복원해야 하며, Restore PowerShell 명령으로 이를 수행할 수 있습니다(아래 단계 참조).
자격 증명 모음이 손실된 경우 자격 증명 모음을 다시 만들고 이전과 동일한 이름을 사용하여 자격 증명 모음에 비대칭 키를 복원해야 합니다. 자격 증명 모음 이름은 다를 수 있습니다(또는 이전과 동일). 새 중요 보관소에 대한 액세스 권한을 설정하여 SQL Server 암호화 시나리오에 필요한 액세스 권한을 SQL Server 서비스 주체에게 부여한 다음, 새 보관소 이름이 반영되도록 SQL Server 자격 증명을 조정합니다.

요약하면 다음 단계와 같습니다.

  • 중요 보관소 키를 백업합니다(Backup-AzureKeyVaultKey PowerShell cmdlet 사용).
  • 중요 보관소에 장애가 발생한 경우 동일한 지리적 하위 지역에 새 자격 증명 모음을 만듭니다. 중요 보관소를 만드는 사용자는 SQL Server의 서비스 주체 설정과 동일한 기본 디렉터리에 위치해야 합니다.
  • 이전과 동일한 이름을 사용하여 키를 복원하는 Restore-AzureKeyVaultKey PowerShell cmdlet을 사용하여 새 중요 보관소에 키를 복원합니다. 이미 동일한 이름의 키가 있는 경우 복원에 실패합니다.
  • SQL Server 서비스 주체에 이 새 자격 증명 모음을 사용할 수 있는 권한을 부여합니다.
  • 새 중요 보관소 이름을 반영하도록 데이터베이스 엔진에서 사용하는 SQL Server 자격 증명을 수정합니다(필요한 경우).

키 백업은 동일한 지역 또는 국가(미국, 캐나다, 일본, 오스트레일리아, 인도, APAC, 유럽, 브라질, 중국, 미국 정부 또는 독일) 클라우드에 있는 경우 Azure 지역에서 복원할 수 있습니다.

B. 질문과 대답

Azure 주요 자격 증명 모음에서

키 작업은 Azure Key Vault에서 어떻게 작동하나요?
주요 자격 증명 모음에 있는 비대칭 키는 SQL Server 암호화 키를 보호하는 데 사용됩니다. 비대칭 키의 퍼블릭 부분만 자격 증명 모음을 떠나고 프라이빗 부분은 자격 증명 모음에서 내보내지 않습니다. 비대칭 키를 사용하는 모든 암호화 작업은 Azure Key Vault 서비스 내에서 수행되며, 서비스 보안에 의해 보호됩니다.

키 URI는 무엇인가요?
Azure Key Vault의 모든 키에는 애플리케이션에서 키를 참조하는 데 사용할 수 있는 URI(Uniform Resource Identifier)가 있습니다. 현재 버전을 가져오려면 https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey 형식을 사용하고, 특정 버전을 가져오려면 https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey/cgacf4f763ar42ffb0a1gca546aygd87 형식을 사용합니다.

SQL Server 구성 시

SQL Server 커넥터에서 액세스해야 하는 엔드포인트는 무엇인가요? 커넥터는 2개의 엔드포인트와 통신하며, 해당 엔드포인트는 허용되어야 합니다. Https의 경우 이러한 다른 서비스에 대한 아웃바운드 통신에 필요한 유일한 포트는 443입니다.

  • login.microsoftonline.com/*:443
  • .vault.azure.net/:443

또한 인증서 해지 목록을 확인하면 포트 80에서 HTTP 트래픽이 발생할 수 있습니다.

참고 항목

방화벽 또는 프록시 서버의 후방에 Azure Key Vault용 SQL Server 커넥터를 사용하면 트래픽이 지연되거나 차단되는 경우 성능에 영향을 줄 수 있습니다. 올바른 규칙을 적용하려면 방화벽 뒤에 있는 Azure Key Vault 액세스를 숙지합니다.

HTTP(S) 프록시 서버를 통해 Azure Key Vault에 연결하려면 어떻게 하나요? 커넥터는 Internet Explorer의 프록시 구성 설정을 사용합니다. 이러한 설정은 그룹 정책 또는 레지스트리를 통해 제어할 수 있지만, 시스템 전체 설정이 아니며 SQL Server 인스턴스를 실행하는 서비스 계정을 대상으로 해야 합니다. 데이터베이스 관리자가 Internet Explorer에서 설정을 보거나 편집하는 경우 SQL Server 엔진이 아닌 데이터베이스 관리자의 계정에만 영향을 미칩니다. 서비스 계정을 사용하여 대화형으로 서버에 로그온하는 것은 권장되지 않으며 여러 보안 환경에서 차단됩니다. 구성된 프록시 설정의 변경 사항은 커넥터가 키 자격 증명 모음에 처음 연결을 시도할 때 캐시되므로 적용하려면 SQL Server 인스턴스를 다시 시작해야 할 수 있습니다.

SQL Server 커넥터에서 지원되는 Azure Key Vault의 키 크기는 무엇인가요? SQL Server 커넥터의 최신 빌드는 2048 및 3072 크기의 Azure Key Vault 키를 지원합니다.

참고 항목

"sys.asymmetric_keys" 보기는 키 크기 3072를 사용하는 경우에도 키 크기를 2048로 보고합니다. 이는 이 뷰에서 알려진 문제이며, SQL Server 제품 팀은 향후 릴리스에서 이 문제를 해결할 것입니다.

SQL Server의 각 구성 단계에 필요한 최소 권한 수준은 무엇인가요?
sysadmin 고정 서버 역할의 구성원은 모든 구성 단계를 수행할 수 있지만, Microsoft는 사용하는 권한을 최소화할 것을 권장합니다. 다음 목록은 각 작업에 대한 최소 권한 수준을 정의합니다.

  • 암호화 공급자를 만들려면 sysadmin 고정 서버 역할의 CONTROL SERVER 권한 또는 멤버십이 필요합니다.

  • 구성 옵션을 변경하고 RECONFIGURE 문을 실행하려면 ALTER SETTINGS 서버 수준 권한이 있어야 합니다. ALTER SETTINGS 권한은 sysadmin 및 serveradmin 고정 서버 역할에 의해 암시적으로 부여됩니다.

  • 자격 증명을 만들려면 ALTER ANY CREDENTIAL 권한이 필요합니다.

  • 로그인에 자격 증명을 추가하려면 ALTER ANY LOGIN 권한이 필요합니다.

  • 비대칭 키를 만들려면 CREATE ASYMMETRIC KEY 권한이 필요합니다.

SQL Server 커넥터에 대해 만든 서비스 주체와 동일한 구독 및 디렉터리에서 키 자격 증명 모음이 생성되도록 기본 Microsoft Entra 디렉터리를 변경하려면 어떻게 해야 하나요?

Microsoft Entra ID 변경 기본 디렉터리 도움말 단계를 보여주는 스크린샷.

  1. Azure Portal로 이동합니다.

  2. 페이지 오른쪽 상단에서 설정 아이콘 또는 사용자 프로필을 선택합니다.

  3. 디렉터리 + 구독 페이지에서 모든 디렉터리를 선택하여 속한 모든 Microsoft Entra 디렉터리를 확인합니다.

  4. 시작 디렉터리를 변경하거나 디렉터리가 여러 개 있는 경우 다른 디렉터리로 전환할 수 있습니다.

    참고 항목

    Azure 구독의 기본 디렉터리를 실제로 변경할 수 있는 권한이 없을 수 있습니다. 이 경우 기본 디렉터리 내에 Microsoft Entra 서비스 주체를 만들어 나중에 사용되는 Azure Key Vault와 동일한 디렉터리에 위치하도록 합니다.

Microsoft Entra ID에 대한 자세한 내용은 Azure 구독이 Microsoft Entra ID와 관련된 방법을 참조하세요.

C. SQL Server 커넥터에 대한 오류 코드 설명

참고 항목

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

공급자 오류 코드:

오류 코드 기호 설명
0 scp_err_Success 작업이 성공했습니다.
1 scp_err_Failure 작업이 실패했습니다.
2 scp_err_InsufficientBuffer 이 오류는 엔진에 지시하여 버퍼에 더 많은 메모리를 할당하도록 합니다.
3 scp_err_NotSupported 작업이 지원되지 않습니다. 예를 들어, 지정한 키 형식 또는 알고리즘이 EKM 공급자에서 지원되지 않습니다.
4 scp_err_NotFound EKM 공급자가 지정된 키 또는 알고리즘을 찾을 수 없습니다.
5 scp_err_AuthFailure EKM 공급자를 사용한 인증이 실패했습니다.
6 scp_err_InvalidArgument 제공된 인수가 잘못되었습니다.
7 scp_err_ProviderError EKM 공급자에서 SQL 엔진에 의해 포착된 지정되지 않은 오류가 발생했습니다.
401 acquireToken 서버는 요청에 대해 401을 응답했습니다. 클라이언트 ID와 비밀 번호가 올바르고 자격 증명 문자열이 하이픈 없이 AAD 클라이언트 ID와 비밀 번호를 연결한 값인지 확인합니다.
404 getKeyByName 키 이름을 찾을 수 없으므로 서버가 404로 응답했습니다. 키 자격 증명 모음에 키 이름이 있는지 확인합니다.
2049 scp_err_KeyNameDoesNotFitThumbprint 키 이름이 너무 길어 SQL 엔진의 지문에 맞지 않습니다. 키 이름은 26자를 초과하면 안 됩니다.
2050 scp_err_PasswordTooShort AAD 클라이언트 ID와 비밀 번호를 연결하는 비밀 번호 문자열은 32자보다 짧아야 합니다.
2051 scp_err_OutOfMemory SQL 엔진의 메모리가 부족하여 EKM 공급자를 위한 메모리를 할당하지 못했습니다.
2052 scp_err_ConvertKeyNameToThumbprint 키 이름을 지문으로 변환하지 못했습니다.
2053 scp_err_ConvertThumbprintToKeyName 지문을 키 이름으로 변환하지 못했습니다.
2058 scp_err_FailureInRegistry 레지스트리에서 작업을 수행하지 못했습니다. SQL Server 서비스 계정에 레지스트리 키를 만들 수 있는 권한이 없습니다.
3000 ErrorSuccess AKV 작업이 성공했습니다.
3001 ErrorUnknown 지정되지 않은 오류가 발생했으며 AKV 작업이 실패했습니다.
3002 ErrorHttpCreateHttpClientOutOfMemory 메모리가 부족하여 AKV 작업에 대한 HttpClient를 만들 수 없습니다.
3003 ErrorHttpOpenSession 네트워크 오류로 인해 Http 세션을 열 수 없습니다.
3004 ErrorHttpConnectSession 네트워크 오류로 인해 Http 세션을 연결할 수 없습니다.
3005 ErrorHttpAttemptConnect 네트워크 오류로 인해 연결을 시도할 수 없습니다.
3006 ErrorHttpOpenRequest 네트워크 오류로 인해 요청을 열 수 없습니다.
3007 ErrorHttpAddRequestHeader 요청 헤더를 추가할 수 없습니다.
3008 ErrorHttpSendRequest 네트워크 오류로 인해 요청을 보낼 수 없습니다.
3009 ErrorHttpGetResponseCode 네트워크 오류로 인해 응답 코드를 가져올 수 없습니다.
3010 ErrorHttpResponseCodeUnauthorized 서버는 요청에 대해 401을 응답했습니다.
3011 ErrorHttpResponseCodeThrottled 서버에서 요청을 제한했습니다.
3012 ErrorHttpResponseCodeClientError 커넥터에서 보낸 요청이 잘못되었습니다. 이 문제는 일반적으로 키 이름이 잘못되었거나 잘못된 문자가 포함되었음을 의미합니다.
3013 ErrorHttpResponseCodeServerError 서버에서 응답 코드 500 ~ 600을 응답했습니다.
3014 ErrorHttpQueryHeader 응답 헤더를 쿼리할 수 없습니다.
3015 ErrorHttpQueryHeaderOutOfMemoryCopyHeader 메모리 부족으로 인해 응답 헤더를 복사할 수 없습니다.
3016 ErrorHttpQueryHeaderOutOfMemoryReallocBuffer 버퍼를 재할당할 때 메모리가 부족하여 응답 헤더를 쿼리할 수 없습니다.
3017 ErrorHttpQueryHeaderNotFound 응답에서 쿼리 헤더를 찾을 수 없습니다.
3018 ErrorHttpQueryHeaderUpdateBufferLength 응답 헤더를 쿼리하는 동안 버퍼 길이를 업데이트할 수 없습니다.
3019 ErrorHttpReadData 네트워크 오류로 인해 응답 데이터를 읽을 수 없습니다.
3076 ErrorHttpResourceNotFound 키 이름을 찾을 수 없으므로 서버가 404로 응답했습니다. 중요 보관소에 키 이름이 있는지 확인합니다.
3077 ErrorHttpOperationForbidden 사용자에게 작업을 수행할 수 있는 적절한 권한이 없기 때문에 서버가 403으로 응답했습니다. 지정된 작업에 대한 권한이 있는지 확인합니다. 커넥터가 올바르게 작동하려면 최소한 'get, list, wrapKey, unwrapKey' 권한이 필요합니다.
3100 ErrorHttpCreateHttpClientOutOfMemory 메모리 부족으로 인해 AKV 작업을 위한 HttpClient를 만들 수 없습니다.
3101 ErrorHttpOpenSession 네트워크 오류로 인해 Http 세션을 열 수 없습니다.
3102 ErrorHttpConnectSession 네트워크 오류로 인해 Http 세션을 연결할 수 없습니다.
3103 ErrorHttpAttemptConnect 네트워크 오류로 인해 연결을 시도할 수 없습니다.
3104 ErrorHttpOpenRequest 네트워크 오류로 인해 요청을 열 수 없습니다.
3105 ErrorHttpAddRequestHeader 요청 헤더를 추가할 수 없습니다.
3106 ErrorHttpSendRequest 네트워크 오류로 인해 요청을 보낼 수 없습니다.
3107 ErrorHttpGetResponseCode 네트워크 오류로 인해 응답 코드를 가져올 수 없습니다.
3108 ErrorHttpResponseCodeUnauthorized 서버는 요청에 대해 401을 응답했습니다. 클라이언트 ID와 비밀이 올바르고, 자격 증명 문자열이 AAD 클라이언트 ID와 비밀을 하이픈 없이 연결한 값인지 확인합니다.
3109 ErrorHttpResponseCodeThrottled 서버에서 요청을 제한했습니다.
3110 ErrorHttpResponseCodeClientError 요청이 잘못되었습니다. 이 문제는 일반적으로 키 이름이 잘못되었거나 잘못된 문자가 포함되었음을 의미합니다.
3111 ErrorHttpResponseCodeServerError 서버에서 응답 코드 500 ~ 600을 응답했습니다.
3112 ErrorHttpResourceNotFound 키 이름을 찾을 수 없으므로 서버가 404로 응답했습니다. 키 자격 증명 모음에 키 이름이 있는지 확인합니다.
3113 ErrorHttpOperationForbidden 사용자가 작업을 수행할 적절한 권한이 없어 서버가 403으로 응답했습니다. 지정된 작업에 대한 권한이 있는지 확인합니다. 최소한 'get, wrapKey, unwrapKey' 권한이 필요합니다.
3114 ErrorHttpQueryHeader 응답 헤더를 쿼리할 수 없습니다.
3115 ErrorHttpQueryHeaderOutOfMemoryCopyHeader 메모리 부족으로 인해 응답 헤더를 복사할 수 없습니다.
3116 ErrorHttpQueryHeaderOutOfMemoryReallocBuffer 버퍼를 재할당할 때 메모리가 부족하여 응답 헤더를 쿼리할 수 없습니다.
3117 ErrorHttpQueryHeaderNotFound 응답에서 쿼리 헤더를 찾을 수 없습니다.
3118 ErrorHttpQueryHeaderUpdateBufferLength 응답 헤더를 쿼리하는 동안 버퍼 길이를 업데이트할 수 없습니다.
3119 ErrorHttpReadData 네트워크 오류로 인해 응답 데이터를 읽을 수 없습니다.
3120 ErrorHttpGetResponseOutOfMemoryCreateTempBuffer 임시 버퍼를 만드는 동안 메모리 부족으로 인해 응답 본문을 가져올 수 없습니다.
3121 ErrorHttpGetResponseOutOfMemoryGetResultString 결과 문자열을 가져올 때 메모리 부족으로 인해 응답 본문을 가져올 수 없습니다.
3122 ErrorHttpGetResponseOutOfMemoryAppendResponse 응답을 추가하는 동안 메모리 부족으로 인해 응답 본문을 가져올 수 없습니다.
3200 ErrorGetAADValuesOutOfMemoryConcatPath 경로를 연결하는 동안 메모리 부족으로 인해 Azure Active Directory 챌린지 헤더 값을 가져올 수 없습니다.
3201 ErrorGetAADDomainUrlStartPosition 잘못된 형식의 응답 챌린지 헤더에서 Azure Active Directory 도메인 URL의 시작 위치를 찾을 수 없습니다.
3202 ErrorGetAADDomainUrlStopPosition 잘못된 형식의 응답 챌린지 헤더에서 Azure Active Directory 도메인 URL의 끝 위치를 찾을 수 없습니다.
3203 ErrorGetAADDomainUrlMalformatted Azure Active Directory 응답 챌린지 헤더의 형식이 잘못되었으며 AAD 도메인 URL이 포함되어 있지 않습니다.
3204 ErrorGetAADDomainUrlOutOfMemoryAlloc Azure Active Directory 도메인 URL에 대한 버퍼를 할당할 때 메모리가 부족합니다.
3205 ErrorGetAADTenantIdOutOfMemoryAlloc Azure Active Directory tenantId에 대한 버퍼를 할당할 때 메모리가 부족합니다.
3206 ErrorGetAKVResourceUrlStartPosition 형식이 잘못된 응답 챌린지 헤더에서 Azure Key Vault 리소스 URL의 시작 위치를 찾을 수 없습니다.
3207 ErrorGetAKVResourceUrlStopPosition 형식이 잘못된 응답 챌린지 헤더에서 Azure Key Vault 리소스 URL의 끝 위치를 찾을 수 없습니다.
3208 ErrorGetAKVResourceUrlOutOfMemoryAlloc Azure Key Vault 리소스 URL에 대한 버퍼를 할당할 때 메모리가 부족합니다.
3300 ErrorGetTokenOutOfMemoryConcatPath 요청 경로를 연결하는 동안 메모리 부족으로 인해 토큰을 가져올 수 없습니다.
3301 ErrorGetTokenOutOfMemoryConcatBody 응답 본문을 연결하는 동안 메모리 부족으로 인해 토큰을 가져올 수 없습니다.
3302 ErrorGetTokenOutOfMemoryConvertResponseString 응답 문자열을 변환하는 동안 메모리 부족으로 인해 토큰을 가져올 수 없습니다.
3303 ErrorGetTokenBadCredentials 잘못된 자격 증명으로 인해 토큰을 가져올 수 없습니다. 자격 증명 문자열 또는 인증서가 유효한지 확인합니다.
3304 ErrorGetTokenFailedToGetToken 자격 증명이 올바르지만 작업이 여전히 유효한 토큰을 가져오지 못했습니다.
3305 ErrorGetTokenRejected 토큰은 유효하지만 서버에서 거부됩니다.
3306 ErrorGetTokenNotFound 응답에서 토큰을 찾을 수 없습니다.
3307 ErrorGetTokenJsonParser 서버의 JSON 응답을 구문 분석할 수 없습니다.
3308 ErrorGetTokenExtractToken JSON 응답에서 토큰을 추출할 수 없습니다.
3400 ErrorGetKeyByNameOutOfMemoryConvertResponseString 응답 문자열을 변환하는 동안 메모리 부족으로 인해 이름으로 키를 가져올 수 없습니다.
3401 ErrorGetKeyByNameOutOfMemoryConcatPath 메모리 부족으로 인해 경로를 연결할 때 이름을 기준으로 키를 가져올 수 없습니다.
3402 ErrorGetKeyByNameOutOfMemoryConcatHeader 헤더를 연결하는 동안 메모리 부족으로 인해 이름으로 키를 가져올 수 없습니다.
3403 ErrorGetKeyByNameNoResponse 서버로부터 응답이 없기 때문에 이름을 기준으로 키를 가져올 수 없습니다.
3404 ErrorGetKeyByNameJsonParser JSON 응답을 구문 분석하지 못하여 이름으로 키를 가져올 수 없습니다.
3405 ErrorGetKeyByNameExtractKeyNode 응답에서 키 노드를 추출하지 못하여 이름으로 키를 가져올 수 없습니다.
3406 ErrorGetKeyByNameExtractKeyId 응답에서 키 ID를 추출하지 못하여 이름으로 키를 가져올 수 없습니다.
3407 ErrorGetKeyByNameExtractKeyType 응답에서 키 유형을 추출하지 못하여 이름으로 키를 가져올 수 없습니다.
3408 ErrorGetKeyByNameExtractKeyN 응답에서 키 N을 추출하지 못해 이름을 기준으로 키를 가져올 수 없습니다.
3409 ErrorGetKeyByNameBase64DecodeN N을 Base64로 디코딩하지 못하여 이름으로 키를 가져올 수 없습니다.
3410 ErrorGetKeyByNameExtractKeyE 응답에서 키 E를 추출하지 못하여 이름으로 키를 가져올 수 없습니다.
3411 ErrorGetKeyByNameBase64DecodeE E를 Base64 디코딩하지 못해 이름을 기준으로 키를 가져올 수 없습니다.
3412 ErrorGetKeyByNameExtractKeyUri 응답에서 URI 키를 추출할 수 없습니다.
3500 ErrorBackupKeyOutOfMemoryConvertResponseString 응답 문자열을 변환하는 동안 메모리 부족으로 인해 키를 백업할 수 없습니다.
3501 ErrorBackupKeyOutOfMemoryConcatPath 경로를 연결하는 동안 메모리 부족으로 인해 키를 백업할 수 없습니다.
3502 ErrorBackupKeyOutOfMemoryConcatHeader 요청 헤더를 연결하는 동안 메모리 부족으로 인해 키를 백업할 수 없습니다.
3503 ErrorBackupKeyNoResponse 서버로부터 응답이 없어 키를 백업할 수 없습니다.
3504 ErrorBackupKeyJsonParser JSON 응답을 구문 분석하지 못하여 키를 백업할 수 없습니다.
3505 ErrorBackupKeyExtractValue JSON 응답에서 값을 추출하지 못하여 키를 백업할 수 없습니다.
3506 ErrorBackupKeyBase64DecodeValue 값 필드를 Base64 디코딩하지 못하여 키를 백업할 수 없습니다.
3600 ErrorWrapKeyOutOfMemoryConvertResponseString 응답 문자열을 변환하는 동안 메모리 부족으로 인해 키를 래핑할 수 없습니다.
3601 ErrorWrapKeyOutOfMemoryConcatPath 경로를 연결하는 동안 메모리 부족으로 인해 키를 래핑할 수 없습니다.
3602 ErrorWrapKeyOutOfMemoryConcatHeader 헤더를 연결하는 동안 메모리 부족으로 인해 키를 래핑할 수 없습니다.
3603 ErrorWrapKeyOutOfMemoryConcatBody 본문을 연결하는 동안 메모리 부족으로 인해 키를 래핑할 수 없습니다.
3604 ErrorWrapKeyOutOfMemoryConvertEncodedBody 인코딩된 본문을 변환하는 동안 메모리 부족으로 인해 키를 래핑할 수 없습니다.
3605 ErrorWrapKeyBase64EncodeKey Base64 인코딩에 실패하여 키를 래핑할 수 없습니다.
3606 ErrorWrapKeyBase64DecodeValue 응답 값을 Base64 디코딩하지 못하여 키를 래핑할 수 없습니다.
3607 ErrorWrapKeyJsonParser JSON 응답을 구문 분석하지 못하여 키를 래핑할 수 없습니다.
3608 ErrorWrapKeyExtractValue 응답에서 값을 추출하지 못해 키를 래핑할 수 없습니다.
3609 ErrorWrapKeyNoResponse 서버로부터 응답이 없어 키를 래핑할 수 없습니다.
3700 ErrorUnwrapKeyOutOfMemoryConvertResponseString 메모리 부족으로 인해 응답 문자열을 변환할 때 키를 래핑 해제할 수 없습니다.
3701 ErrorUnwrapKeyOutOfMemoryConcatPath 경로를 연결하는 동안 메모리 부족으로 인해 키의 래핑을 해제할 수 없습니다.
3702 ErrorUnwrapKeyOutOfMemoryConcatHeader 헤더를 연결하는 동안 메모리 부족으로 인해 키의 래핑을 해제할 수 없습니다.
3703 ErrorUnwrapKeyOutOfMemoryConcatBody 메모리 부족으로 인해 본문을 연결할 때 키를 래핑 해제할 수 없습니다.
3704 ErrorUnwrapKeyOutOfMemoryConvertEncodedBody 인코딩된 본문을 변환하는 동안 메모리 부족으로 인해 키를 언래핑할 수 없습니다.
3705 ErrorUnwrapKeyBase64EncodeKey Base64 인코딩에 실패하여 키의 래핑을 해제할 수 없습니다.
3706 ErrorUnwrapKeyBase64DecodeValue 응답 값을 Base64 디코딩하지 못하여 키의 래핑을 해제할 수 없습니다.
3707 ErrorUnwrapKeyJsonParser 응답에서 값을 추출하지 못하여 키의 래핑을 해제할 수 없습니다.
3708 ErrorUnwrapKeyExtractValue 응답에서 값을 추출하지 못하여 키의 래핑을 해제할 수 없습니다.
3709 ErrorUnwrapKeyNoResponse 서버로부터 응답이 없어 키의 래핑을 해제할 수 없습니다.
3800 ErrorSecretAuthParamsGetRequestBody AAD 클라이언트 ID 및 비밀을 사용하여 요청 본문을 만드는 동안 오류가 발생했습니다.
3801 ErrorJWTTokenCreateHeader AAD를 사용한 인증을 위해 JWT 토큰 헤더를 만드는 동안 오류가 발생했습니다.
3802 ErrorJWTTokenCreatePayloadGUID AAD로 인증하기 위한 JWT 토큰 페이로드에 대한 GUID를 만드는 동안 오류가 발생했습니다.
3803 ErrorJWTTokenCreatePayload AAD를 사용한 인증을 위해 JWT 토큰 페이로드를 만드는 동안 오류가 발생했습니다.
3804 ErrorJWTTokenCreateSignature AAD를 사용한 인증을 위해 JWT 토큰 서명을 만드는 동안 오류가 발생했습니다.
3805 ErrorJWTTokenSignatureHashAlg AAD를 사용한 인증을 위해 SHA256 해시 알고리즘을 가져오는 동안 오류가 발생했습니다.
3806 ErrorJWTTokenSignatureHash AAD를 사용한 JWT 토큰 인증을 위해 SHA256 해시를 생성하는 동안 오류가 발생했습니다.
3807 ErrorJWTTokenSignatureSignHash AAD를 사용한 인증을 위해 JWT 토큰 해시에 서명하는 동안 오류가 발생했습니다.
3808 ErrorJWTTokenCreateToken AAD를 사용한 인증을 위해 JWT 토큰을 만드는 동안 오류가 발생했습니다.
3809 ErrorPfxCertAuthParamsImportPfx AAD를 사용한 인증을 위해 Pfx 인증서를 가져오는 동안 오류가 발생했습니다.
3810 ErrorPfxCertAuthParamsGetThumbprint AAD를 사용한 인증을 위해 Pfx 인증서에서 지문을 가져오는 동안 오류가 발생했습니다.
3811 ErrorPfxCertAuthParamsGetPrivateKey AAD를 사용한 인증을 위해 Pfx 인증서에서 프라이빗 키를 가져오는 동안 오류가 발생했습니다.
3812 ErrorPfxCertAuthParamsSignAlg AAD를 사용한 Pfx 인증서 인증을 위해 RSA 서명 알고리즘을 가져오는 동안 오류가 발생했습니다.
3813 ErrorPfxCertAuthParamsImportForSign AAD를 사용한 인증을 위해 RSA 서명에 대한 Pfx 프라이빗 키를 가져오는 동안 오류가 발생했습니다.
3814 ErrorPfxCertAuthParamsCreateRequestBody AAD를 사용한 인증을 위해 Pfx 인증서에서 요청 본문을 만드는 동안 오류가 발생했습니다.
3815 ErrorPEMCertAuthParamsGetThumbprint AAD를 사용한 인증을 위해 지문을 디코딩하는 동안 Base64 오류가 발생했습니다.
3816 ErrorPEMCertAuthParamsGetPrivateKey AAD를 사용한 인증을 위해 PEM에서 RSA 프라이빗 키를 가져오는 동안 오류가 발생했습니다.
3817 ErrorPEMCertAuthParamsSignAlg AAD를 사용한 PEM 프라이빗 키 인증을 위한 RSA 서명 알고리즘을 가져오는 동안 오류가 발생했습니다.
3818 ErrorPEMCertAuthParamsImportForSign AAD를 사용한 인증을 위해 RSA 서명에 대한 PEM 프라이빗 키를 가져오는 동안 오류가 발생했습니다.
3819 ErrorPEMCertAuthParamsCreateRequestBody AAD를 사용한 인증을 위해 PEM 프라이빗 키에서 요청 본문을 만드는 동안 오류가 발생했습니다.
3820 ErrorLegacyPrivateKeyAuthParamsSignAlg AAD를 사용한 레거시 프라이빗 키 인증을 위해 RSA 서명 알고리즘을 가져오는 동안 오류가 발생했습니다.
3821 ErrorLegacyPrivateKeyAuthParamsImportForSign AAD를 사용한 인증을 위해 RSA 서명에 대한 레거시 프라이빗 키를 가져오는 동안 오류가 발생했습니다.
3822 ErrorLegacyPrivateKeyAuthParamsCreateRequestBody AAD를 사용한 인증을 위해 레거시 프라이빗 키에서 요청 본문을 만드는 동안 오류가 발생했습니다.
3900 ErrorAKVDoesNotExist 오류 인터넷 이름이 확인되지 않았습니다. 이는 일반적으로 Azure Key Vault가 삭제되었음을 나타냅니다.
4000 ErrorCreateKeyVaultRetryManagerOutOfMemory 메모리 부족으로 인해 AKV 작업을 위한 RetryManager를 만들 수 없습니다.

이 테이블에 오류 코드가 표시되지 않으면 오류가 발생할 수 있는 몇 가지 다른 이유는 다음과 같습니다.

  • 인터넷에 액세스할 수 없고 Azure Key Vault에 액세스할 수 없을 수 있습니다. 인터넷 연결을 확인하세요.

  • Azure 주요 자격 증명 모음 서비스가 종료될 수 있습니다. 다음에 다시 시도하십시오.

  • Azure 주요 자격 증명 모음 또는 SQL Server에서 비대칭 키를 삭제했을 수 있습니다. 키를 복원합니다.

  • "라이브러리를 로드할 수 없습니다" 오류가 표시되는 경우 실행 중인 SQL Server 버전에 따라 적절한 버전의 Visual Studio C++ 재배포판이 설치되어 있는지 확인합니다. 아래 테이블에서는 Microsoft 다운로드 센터에서 설치할 버전을 확인할 수 있습니다.

또한 Windows 이벤트 로그에는 SQL Server 커넥터와 관련된 오류도 기록되므로 오류가 실제로 발생하는 이유에 대한 추가 컨텍스트를 파악하는 데 도움이 될 수 있습니다. Windows 애플리케이션 이벤트 로그의 소스는 "Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터"입니다.

SQL Server 커넥터 1.0.5.0용 C++ 런타임 라이브러리

SQL Server 버전: SQL Server 커넥터 1.0.5.0을 사용 중인 경우 재배포 가능한 설치 링크
2008, 2008 R2, 2012, 2014 Visual Studio 2013용 Visual C++ 재배포 가능 패키지
2016, 2017, 2019 Visual Studio 2015용 Visual C++ 재배포 가능 패키지

SQL Server 커넥터 1.0.4.0용 C++ 런타임 라이브러리

SQL Server 버전: SQL Server 커넥터 1.0.4.0을 사용하는 경우 재배포 가능 설치 링크
2008, 2008 R2, 2012, 2014, 2016, 2017, 2019 Visual Studio 2013용 Visual C++ 재배포 가능 패키지

추가 참조

확장 가능 키 관리에 대한 자세한 정보:

EKM을 지원하는 SQL 암호화:

관련 Transact-SQL 명령:

Azure Key Vault 설명서: