Microsoft ODBC 드라이버 for SQL Server의 주요 버전 차이점

이 글은 Microsoft ODBC Driver 18 for SQL Server와 버전 17 간의 주요 변경 사항을 설명합니다. 드라이버 버전을 선택하거나, 애플리케이션을 버전 17에서 버전 18로 업그레이드하거나, 두 버전 모두에서 연결 문자열이 일관되게 동작하도록 해야 할 때 사용하세요.

버전 17에서 버전 18로 업그레이드하는 대부분의 애플리케이션은 단 하나의 변경점에 영향을 받습니다: 연결이 기본적으로 암호화되어 있습니다. 업그레이드 후 애플리케이션이 연결이 끊기면 먼저 기본 암호화 동작 을 읽으세요.

버전 17 또는 버전 18을 선택하세요

드라이버 18이 현재 주요 버전입니다. 드라이버 17은 여전히 지원되지만, 이를 사용하는 애플리케이션은 여전히 드라이버 17 라인의 최신 마이너 버전이 수정을 받아야 합니다. 지원 날짜와 서비스 규칙에 대해서는 지원 수명 주기를 참조하세요.

Scenario 권장 경로
새로운 적용 드라이버 18부터 시작하세요. 생산 전에 암호화와 인증서 검증을 구성하세요.
기존 드라이버 17 애플리케이션 드라이버 17과 함께 드라이버 18을 설치하고, 연결 문자열이나 DSN에서 드라이버 이름을 변경한 뒤 명시적으로 설정 Encrypt 하세요. 인증서 검증이 실패하면 서버 인증서나 클라이언트의 신뢰 저장소를 수정하세요.
, , RetryExec, 또는 다른 드라이버 18 키워드가 필요한 Encrypt=StrictHostnameInCertificate애플리케이션입니다 해당 설정을 지원하는 Driver 18 버전을 사용하세요. 드라이버 17은 새로운 Encrypt 키워드의 값을 받아들 Strict 이지 않고 인식하지 못합니다.
인증서 파일 핀닝이 필요한 애플리케이션입니다. ServerCertificate 드라이버 18.1 또는 그 후속 버전을 Encrypt=Strict사용하세요. 드라이버 17은 이 설정을 지원하지 않습니다.

주요 버전을 변경한다는 것은 일반적으로 선택한 드라이버 이름이나 패키지를 변경하는 것을 의미합니다:

Platform 드라이버 17 드라이버 18
연결 문자열 드라이버 이름 ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
리눅스 패키지 이름 msodbcsql17 msodbcsql18

변경 내용 요약

기본 행과 검증 행은 DSN Encrypt 설정, 속성, SQL_COPT_SS_ENCRYPT 또는 Windows 강제 프로토콜 암호화 오버라이드 없이 일반 원격 연결을 설명합니다. LocalDB는 원격 TLS 대상이 아닙니다.

Area 버전 17 버전 18 및 이후 버전
기본 Encrypt 설정 no, 가 다른 값 none 으로 설정되지 않는 한Authentication, 또는 애플리케이션이 를 세트로 설정한다SQL_COPT_SS_ACCESS_TOKEN면 ;yes yes (18.0.1 이후)
Encrypt 수용된 가치 yes, no yes, no, Mandatory, OptionalStrict
암호화 모드 꺼져 있든 켜져 있든 꺼지든, 켜든, 엄격하든
서버 인증서 유효성 검사 와 함께 Encrypt=yes;TrustServerCertificate=no인증서를 검증합니다. 서버 필수 암호화만으로는 검증을 선택하지 않습니다. 기본적으로 검증됩니다. 비제한 모드 TrustServerCertificate=yes 에서는 서버가 암호화를 요구할 때를 포함해 일반적인 검증을 건너뛸습니다.
연결 문자열 키워드 기본 집합 기본 세트와 새로운 키워드

암호화 변경 내용

기본 암호화 동작

드라이버 17은 키워드가 Authentication 다른 none 값으로 설정되어 있거나 애플리케이션이 속성을 설정 SQL_COPT_SS_ACCESS_TOKEN 하지 않는 한 기본값 Encrypt=no 으로 작동합니다. 어느 쪽이든 기본값 yes을 로 바꿉니다. 명시적이 Encrypt=no 라도 암호화는 꺼집니다. 드라이버 18.0.1 이후 버전은 기본적으로 Encrypt=yes. 버전을 비교할 때 명시적으로 설정 Encrypt 하세요.

완전 연결 암호화는 쿼리 텍스트와 결과, 그리고 로그인 정보를 보호합니다. 이 있을 때는 Encrypt=no여전히 전체 연결 암호화를 요구할 수 있습니다. 클라이언트와 서버 모두 암호화를 해제하면, 비엄격한 협상은 로그인 전용 암호화를 사용합니다; 이로 인해 이후 애플리케이션 데이터는 보호되지 않습니다.

와 함께 Encrypt=yes;TrustServerCertificate=no두 드라이버 모두 일반 서버 인증서 검증을 선택합니다. 서버만 전체 연결 암호화를 요구하는 TrustServerCertificate=no 경우(기본값) 드라이버 18은 인증서를 검증합니다. 외부 Strict 모드에서는 TrustServerCertificate=yes 드라이버 18이 그 검증을 건너뛸 수 있습니다. 드라이버 17은 서버 요구 사항 때문에 검증되지 않습니다. Windows 강제 프로토콜 암호화와 내부 인증서 검증 콜백 경로는 이 비교에서 제외됩니다.

기본 암호화 설정에서는 버전 17에서 버전 18로 업그레이드할 때 신뢰할 수 없는 서버 인증서가 노출될 수 있습니다. 버전 18이 인증서를 거부하면, 인증 설정을 변경하기 전에 인증서 체인과 이름을 진단하세요.

암호화 및 서버 신원 검증 활성화:

  • 유효한 서버 인증서와 클라이언트의 신뢰 저장소를 구성하여 클라이언트가 발급 인증서 기관을 신뢰하도록 하세요. 인증서에 있는 이름으로 연결하세요.
  • 별칭으로 연결한다면, 서버 인증서에 유효한 이름으로 설정 HostnameInCertificate 하세요. 이 설정은 신뢰할 수 없는 인증서 체인을 복구하지 않습니다.
  • 드라이버 Encrypt=Strict18.1 이후 버전은 서버 인증서와 인증서 파일을 대조하는 기능도 지원합니다 ServerCertificate . 이 설정은 인증서를 핀킹합니다; 호스트 이름을 지정하지 않습니다. 사용 전에 ODBC DSN과 연결 문자열 키워드의 제한 사항을 반드시 확인하세요.

Caution

고립된 테스트 환경 Encrypt=yes;TrustServerCertificate=yes 에서는 암호화를 요청하지만 서버 신원 검증을 건너뛰어 연결이 중간 공격에 노출됩니다. 프로덕션 트러스트 수리로 사용하지 마세요. 엄격한 모드 TrustServerCertificate 에서는 무시됩니다.

기존 애플리케이션이 제어 호환성 테스트 중 버전 17 기본값을 요구하는 경우, 버전 17 암호화 동작 복원을 참조하세요. Encrypt=no Encrypt=optional 인증서 신뢰를 복구하지 말고 애플리케이션 데이터를 암호화하지 않은 상태로 남길 수 있습니다.

값 암호화

버전 17은 와 no만 yes 허용합니다. 버전 18 및 이후 버전은 이 값을 인정하고 세 가지를 추가합니다:

Value 다음과 동일합니다: 작동 방식
Mandatory yes 연결은 암호화되어 있습니다.
Optional no 전체 연결 암호화를 요청하지 않습니다. 서버는 여전히 이를 요구할 수 있습니다; 로그인 전용 암호화는 완전한 세션 보호가 아닙니다.
Strict 없음 연결은 TDS 8.0 암호화를 사용합니다. 서버는 SQL Server 2022 및 이후 버전과 같은 TDS 8.0을 지원해야 합니다.

Strict 버전 17에 해당하는 버전은 없습니다. TDS 8.0을 선택하는 유일한 값으로, 로그인 교환 중에 암호화가 협상되는 경우입니다.

버전 17 암호화 동작 복원

신뢰 수정 사항을 검토한 후, 암호화되지 않은 애플리케이션 데이터를 허용하는 통제된 호환성 테스트에만 다음 설정을 사용하세요:

Encrypt=no

드라이버 18도 이 설정에서 이를 수용합니다 Encrypt=optional . 이 두 값 모두 서버가 암호화를 요구하는 것을 막지 않습니다. 테스트 후 의도한 암호화 구성을 복원하세요; 비활성화된 암호화를 인증서 신뢰 해결책으로 사용하지 마세요.

업그레이드 검사 목록

  1. 인벤토리 연결 문자열, DSN, 패키지 참조, 그리고 Driver 17을 선택하는 배포 스크립트.
  2. 프로덕션 환경에 Driver 18을 설치하세요.
  3. 각 연결 문자열ODBC Driver 18 for SQL Server의 키워드를 Driver 로 변경하고, 각 DSN을 Driver 18을 사용하도록 업데이트하거나 다시 생성합니다. 드라이버 18을 설치해도 기존 연결이 바뀌지 않습니다. 드라이버 17이라는 이름이 붙은 연결들은 계속 드라이버 17을 사용하기 때문입니다.
  4. 명시적으로 설정합니다 Encrypt . 일반적인 인증서 검증과 함께 사용 Encrypt=Mandatory 하세요. 서버가 TDS 8.0을 지원할 때만 사용 Encrypt=Strict 하세요. 예: SQL Server 2022 및 이후 버전입니다. TDS 8.0을 지원하지 않는 서버의 경우, Encrypt=Mandatory.
  5. 일반적인 검증을 위해서는 신뢰할 수 있는 체인과 승인된 서버 이름에 TrustServerCertificate=no 연결하여 검증하세요. Strict 파일 핀닝이 적용된 드라이버 18.1 및 이후 버전에서는 정확한 인증서 일치와 유효 날짜를 확인하세요; TrustServerCertificate Strict 모드에서는 이를 무시합니다.
  6. 애플리케이션의 인증, 쿼리, 트랜잭션, 대량 복사, 장애 조치, 재시도 경로를 실행하세요.
  7. 인증 또는 네트워크 오류로 간주하기 전에 인증서 검증 오류를 진단 결과로 검토하세요.
  8. 드라이버 17을 계속 설치하고 검증이 완료될 때까지 1단계부터 인벤토리를 유지하세요. 그래야 버전 17로 롤백할 수 있습니다.

버전 17로 롤백하기

드라이버 17과 드라이버 18은 나란히 설치되므로 드라이버 18을 삭제하지 않고도 롤백할 수 있습니다. 다운로드 및 설치 세부 사항은 SQL Server용 ODBC 드라이버 다운로드를 참조하세요.

  1. 각 클라이언트에 드라이버 17이 아직 설치되어 있는지 확인하세요.
  2. 업그레이드 체크리스트의 인벤토리를 사용해 각 연결 문자열의 키워드를 Driver 다시 .로 ODBC Driver 17 for SQL Server변경하세요.
  3. 각 DSN을 드라이버 17을 사용하도록 업데이트하거나 다시 생성하세요.
  4. 패키지 참조와 배포 스크립트를 Driver 17 패키지(예: msodbcsql17 Linux)로 되돌립니다.
  5. Driver 17과 함께 애플리케이션이 사용한 값을 복원 EncryptTrustServerCertificate 하세요. 드라이버 17은 오직 와 no 에 대해 Encrypt 서만 yes 허용하며 드라이버 18의 키워드(예: HostnameInCertificate 또는 ServerCertificate)를 인식하지 않으므로, 드라이버 18에 추가된 값과 키워드를 제거하세요. 별칭 키워드를 드라이버 17 이름으로 다시 바꾸고, 를 설정하는 SQL_ATTR_LOGIN_TIMEOUT호출로 SQLSetConnectAttr 대체 ConnectTimeout 하세요. 매핑에 대해서는 New 연결 문자열 키워드를 참조하세요.

롤백을 완료로 간주하기 전에 검증하세요:

  • 각 연결은 운전자 17을 보고합니다. SQLGetInfoSQL_DRIVER_VER에 호출하세요; 주요 버전은 17.
  • 애플리케이션의 인증, 쿼리, 트랜잭션, 대량 복사, 장애 조치, 재시도 경로가 모두 성공합니다.
  • 연결 문자열과 DSN에는 드라이버 18에 추가된 값이나 키워드가 없습니다 Encrypt .

새로운 연결 문자열 키워드

버전 18은 다음과 같은 연결 문자열 키워드를 추가했는데, 버전 17에서는 이를 인식하지 못합니다. 그중 일부는 버전 17이 지원하는 다른 키워드나 속성 아래 설정의 새로운 이름으로, 버전 17 동등한 열에 나열되어 있습니다.

키워드 최소 버전 Purpose 버전 17에 해당하는 버전
ConcatNullYieldsNull 18.6 null 값을 연결하면 null이 생성되는지 제어합니다. 없음
ConnectTimeout 18.7 로그인 타임아웃이 몇 초 만에 설정됩니다. 애플리케이션이 도 를 설정 SQL_ATTR_LOGIN_TIMEOUT하면 속성이 우선권을 가집니다. SQL_ATTR_LOGIN_TIMEOUT 속성으로 설정하여 SQLSetConnectAttr
FailoverPartner 18.7 데이터베이스 미러링을 위한 페일오버 파트너를 지정합니다. Windows 전용. Failover_Partner 키워드
GetDataExtensions 18.0 드라이버가 활성화하는 확장 프로그램을 제어 SQLGetData 합니다. 없음
HostnameInCertificate 18.0 서버의 TLS 인증서에서 검증할 호스트 이름을 지정합니다. 없음
IpAddressPreference 18.1 드라이버가 먼저 시도하는 IP 주소 계열을 지정합니다. 없음
LongAsMax 18.0 긴 데이터 타입을 해당 max 데이터와 대응하는 데이터로 매핑합니다. 없음
MultipleActiveResultSets 18.7 다중 활성 결과 집합(MARS)을 활성화합니다. Yes 또는 No를 수락합니다. MARS_Connection 키워드
RetryExec 18.1 실패한 쿼리에 대한 재설정 규칙을 설정하세요. 없음
ServerCertificate 18.1 . Encrypt=Strict사용 시 서버 인증서와 일치할 인증서 파일을 지정합니다. 없음
WorkstationID 18.7 서버에 전송되는 워크스테이션 이름을 지정합니다. WSID 키워드

MultipleActiveResultSets, , WorkstationID, 그리고 FailoverPartner ODBC 키워드 이름 Microsoft.Data.SqlClient 과 속성 이름을 정렬하는 별칭입니다. 버전 18은 이전 이름들도 허용합니다. 자세한 내용은 Connection string 키워드 통합 과 ConnectTimeout 키워드를 참조하세요.

전체 키워드 참조는 ODBC DSN 및 연결 문자열 키워드를 참조하세요.