적용 대상: SQL Server 2022(16.x)
Azure SQL 데이터베이스
Azure SQL Managed Instance
SQL Server 2022(16.x), Azure SQL Database 및 Azure SQL Managed Instance는 TDS(Tabular Data Stream) 8.0을 지원합니다.
TDS(Tabular Data Stream) 프로토콜은 클라이언트가 SQL Server에 연결하는 데 사용하는 애플리케이션 계층 프로토콜입니다. SQL Server에서는 TLS(전송 계층 보안)를 사용하여 클라이언트 애플리케이션과 SQL Server 인스턴스 간에 네트워크를 통해 전송되는 데이터를 암호화합니다.
TDS는 보안 프로토콜이지만 이전 버전의 SQL Server에서는 암호화를 해제할 수 있거나 사용하도록 설정할 수 없었습니다. SQL Server를 사용하는 동안 필수 암호화 표준을 충족하기 위해 TDS 프로토콜의 반복이 TDS 8.0에서 도입되었습니다.
이제 TLS 핸드셰이크가 모든 TDS 메시지 앞에 이동하여 TDS 세션을 TLS로 래핑하여 암호화를 적용하고 TDS 8.0을 HTTPS 및 기타 웹 프로토콜에 맞춥니다. 이 향상된 기능은 이제 표준 네트워크 어플라이언스가 SQL 쿼리를 필터링하고 안전하게 전달할 수 있으므로 TDS 트래픽 관리 효율성에 크게 기여합니다.
이전 TDS 버전에 비해 TDS 8.0의 이점은 TLS 1.3과의 호환성 및 올 TLS 표준입니다. TDS 8.0은 TLS 1.2 및 이전 TLS 버전과도 완벽하게 호환됩니다.
TDS 작동 방식
TDS(Tabular Data Stream) 프로토콜은 클라이언트와 데이터베이스 서버 시스템 간의 요청 및 응답 전송에 사용되는 애플리케이션 수준 프로토콜입니다. 클라이언트 시스템은 일반적으로 서버와 수명이 긴 연결을 설정합니다. 전송 수준 프로토콜을 사용하여 연결이 설정되면 TDS 메시지가 교환되어 클라이언트와 SQL Server 간에 통신합니다.
TDS 세션 수명 동안에 다음 세 단계가 있습니다.
- 초기화
- 인증
- 데이터 교환
암호화는 초기 단계에서 협상되지만 TDS 협상은 암호화되지 않은 연결을 통해 이루어집니다. SQL Server 연결은 TDS 8.0 이전 버전에서 다음과 같이 표시됩니다.
TCP 핸드셰이크 ➡️ TDS 사전 로그인(일반 텍스트) 및 응답(일반 텍스트) ➡️ TLS 핸드셰이크 ➡️ 인증(암호화됨) ➡️ 데이터 교환(암호화될 수도 암호화되지 않을 수도 있음)
TDS 8.0 도입 후 SQL Server 연결은 다음과 같습니다.
TCP 핸드셰이크 ➡️ TLS 핸드셰이크 ➡️ TDS 사전 로그인(암호화됨) 및 응답(암호화됨) ➡️ 인증(암호화됨) ➡️ 데이터 교환(암호화됨)
TDS, TLS, OS 및 암호화 옵션에 대한 호환성 매트릭스
OS 수준에서 TLS 1.2 및 TLS 1.3 버전을 모두 사용하도록 설정할 수 있으므로 SQL Server에 대한 클라이언트 연결에서 여러 TDS 프로토콜 버전(TDS 7.x 및 8.0)을 사용할 수 있습니다. OS 버전에 따라 TLS 1.2 및 TLS 1.3은 기본적으로 사용하도록 설정될 수 있습니다.
TDS 7.x만 암호화되지 않은(선택 사항) 통신을 지원하며 TDS 8.0은 이를 지원하지 않습니다. TDS 7.x는 TLS를 사용하여 버전 1.2까지 암호화를 지원합니다. TDS 8.0에는 암호화가 필요합니다. 모든 항목은 항상 TDS 8.0(Encrypt=Strict)으로 암호화됩니다. TDS 8.0에는 최소 TLS 버전 요구 사항이 없으며 TLS 1.3을 지원합니다. TLS 1.3 지원은 운영 체제 버전에 따라 달라집니다. 다음 표에는 암호화 옵션 및 해당 TLS 및 TDS 버전이 포함된 다양한 시나리오가 요약되어 있습니다.
암호화 옵션 |
TLS 버전 사용 | OS 버전 | 예상 connection 결과 |
비고 |
---|---|---|---|---|
Strict | TLS 1.3 이상 (또는 이후) | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.3 협상; TDS 8.0 트리거됨(Encrypt=Strict) |
Strict | TLS 1.2 및 TLS 1.3 | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.3 협상; TDS 8.0 트리거됨(Encrypt=Strict) |
Strict | TLS 1.2 또는 이전 버전만 | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.2 협상; TDS 8.0 트리거됨(Encrypt=Strict) |
Strict | TLS 1.2만 (또는 이전 버전) | Windows 10 Windows Server 2019/2016 |
성공 | TLS 1.2 협상; TDS 8.0 트리거됨(TLS 1.3을 사용할 수 없음) |
필수 | TLS 1.3 이상만 | 윈도우 11 Windows Server 2022 이상 |
실패 | Encrypt=필수는 TDS 8.0용 TLS 1.3과 호환되지 않습니다. |
필수 | TLS 1.2 및 TLS 1.3 | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.2 협상; TDS 8.0이 트리거되지 않음(Encrypt=Mandatory) |
필수 | TLS 1.2만 (또는 이전 버전) | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.2 협상; TDS 8.0이 트리거되지 않음(Encrypt=Mandatory) |
필수 | TLS 1.2만 (또는 이전 버전) | Windows 10 Windows Server 2019/2016 |
성공 | TLS 1.2 협상; 이 OS에서 지원되지 않는 TDS 8.0(TDS 7.x 사용) |
선택적 | TLS 1.3 버전 이상만 | 윈도우 11 Windows Server 2022 이상 |
실패 | Encrypt=Optional(false)는 TDS 7.x이며 TLS 1.3과 호환되지 않습니다. |
선택적 | TLS 1.2 및 TLS 1.3 | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.3 협상; TDS 8.0이 트리거되지 않음(Encrypt=Optional) |
선택적 | TLS 1.2만 (또는 더 이전 버전) | 윈도우 11 Windows Server 2022 이상 |
성공 | TLS 1.2 협상; TDS 8.0이 트리거되지 않음(Encrypt=Optional) |
선택적 | TLS 1.2만(이전 버전 포함) | Windows 10 Windows Server 2019/2016 |
성공 | TLS 1.2 협상; 암호화 선택 사항; 연결 가능 암호화 없이 성공 |
어느 것이든 | TLS 1.3 이상만 사용 | Windows 10 Windows Server 2019/2016 |
실패 | 이 OS에서 지원되지 않는 TLS 1.3 |
클라이언트가 다른 TDS 버전을 사용하는 방법에 대한 자세한 내용은 연결 문자열 암호화 속성 변경 내용 섹션의 키워드 사용을 참조하세요.
SQL Server 2025 지원
SQL Server 2025(17.x) 미리 보기에는 다음 명령줄 도구 및 SQL Server 기능에 대한 TDS 8.0 지원이 도입되었습니다.
- SQL Server 에이전트
- sqlcmd 유틸리티
- bcp 유틸리티
- SQL VSS 기록기
- SQL CEIP 서비스
- Polybase
- Always On 가용성 그룹
- 항상 사용 장애 조치(Always On Failover) 클러스터 인스턴스 (FCI)
- 연결된 서버1
- 트랜잭션 복제1
- 병합 복제1
- 스냅샷 복제1
- 로그 전달1
1TDS 8.0 지원은 이러한 기능에 호환성이 손상되는 변경 사항을 도입합니다.
엄격한 연결 암호화
TDS 8.0을 사용하기 위해 SQL Server 2022(16.x)가 SQL Server 드라이버(strict
)에 대한 추가 연결 암호화 옵션으로 추가되었습니다Encrypt=strict
. 연결 암호화 유형을 사용 strict
하려면 최신 버전의 .NET, ODBC, OLE DB, JDBC, PHP 및 Python 드라이버를 다운로드합니다.
- SQL Server 및 Azure SQL 데이터베이스용 Microsoft ADO.NET 버전 5.1 이상
- ODBC Driver for SQL Server 버전 18.1.2.1 이상
- Microsoft OLE DB Driver for SQL Server 버전 19.2.0 이상
- Microsoft JDBC Driver for SQL Server 버전 11.2.0 이상
- Microsoft Drivers for PHP for SQL Server 버전 5.10 이상
- Python SQL 드라이버 - pyodbc
중간자 공격을 방지하기 위해 사용자는 strict
연결 암호화를 사용하여 TrustServerCertificate
옵션을 true
로 설정하거나 서버가 제공한 인증서를 모두 허용할 수 없습니다. 대신 사용자는 HostNameInCertificate
옵션을 사용하여 신뢰할 인증서 ServerName
을(를) 지정합니다. 서버에서 제공하는 인증서는 인증서 유효성 검사를 통과해야 합니다. 인증서 유효성 검사에 대한 자세한 내용은 SQL Server에 대한 인증서 요구 사항을 참조하세요.
엄격한 암호화 강제 적용을 지원하지 않는 기능
SQL Server 네트워크 구성에서 TDS 8.0과 함께 추가된 Force Strict Encryption
옵션은 모든 클라이언트가 암호화 유형으로 strict
을(를) 사용하도록 강제합니다.
strict
연결 암호화를 사용하지 않는 모든 클라이언트 또는 기능은 SQL Server에 연결하지 못합니다.
다음 기능 또는 도구는 TDS 8.0을 지원하지 않는 이전 버전의 드라이버를 계속 사용하므로 strict
연결 암호화와 함께 제대로 작동하지 않을 수 있습니다.
- 데이터베이스 메일
연결 문자열 암호화 속성에 대한 추가 변경 내용
다음 옵션은 통신을 암호화하기 위해 연결 문자열에 추가됩니다.
키워드 | 기본값 | 설명 |
---|---|---|
Encrypt |
false |
이전 연결 문자열 옵션 유효한 옵션은 다음과 같습니다. - true 또는 yes - false
no 또는 . 자세한 내용은 연결 문자열 구문을 참조하세요. SQL true Server는 서버에 인증서가 설치된 경우 클라이언트와 서버 간에 교환되는 모든 데이터에 대해 TLS 1.2 암호화를 사용합니다.최신 연결 문자열 옵션 유효한 옵션은 다음과 같습니다. - strict - mandatory 또는 , 또는 true yes - optional 또는 , 또는 false no . 설정 strict 하면 SQL Server는 클라이언트와 서버 간에 교환되는 모든 데이터에 TDS 8.0을 사용합니다.mandatory , true 또는 yes 로 설정된 경우 서버에 인증서가 설치되어 있으면 SQL Server에서 클라이언트와 서버 간에 전송되는 모든 데이터에 TLS/SSL와 함께 TDS 7.x를 사용합니다.optional , false 또는 no 로 설정된 경우 연결은 TDS 7.x를 사용하며 SQL Server에서 필요한 경우에만 암호화됩니다. |
TrustServerCertificate |
false |
이전 연결 문자열 옵션 (권장하지 않음)로 true 설정하면 드라이버는 서버 TLS/SSL 인증서의 유효성을 검사하지 않습니다. 이 경우 true TLS를 사용하여 통신 계층을 암호화할 때 서버 TLS/SSL 인증서가 자동으로 신뢰(유효성 검사 무시)됩니다.false 이면, 드라이버가 서버 TLS/SSL 인증서의 유효성을 검사합니다. 서버 인증서 유효성 검사에 실패하면 드라이버에서 오류가 발생하고 연결이 닫힙니다. 기본값은 false 입니다. TLS/SSL 연결이 성공하려면 serverName 에 전달된 값이 서버 인증서의 Common Name (CN) 에 있는 Subject Alternate Name 또는 DNS 이름과 정확히 일치해야 합니다.Microsoft SQL Server ODBC Driver 18 이상에 대한 동작 변경 설정된 Encrypt 경우 strict 이 설정은 서버 인증서 유효성 검사에 사용할 인증서의 위치를 지정합니다(정확히 일치). 이 드라이버는 PEM, DER 및 CER 파일 확장자를 지원합니다.Encrypt
true 설정되거나 false 설정 TrustServerCertificate 되고 속성이 지정되지 null 않거나 , true false 또는 드라이버가 연결 URL의 ServerName 속성 값을 호스트 이름으로 사용하여 SQL Server TLS/SSL 인증서의 유효성을 검사합니다. |
HostNameInCertificate |
null |
SQL Server TLS/SSL 인증서의 유효성을 검사할 때 사용할 호스트 이름입니다. 속성이 HostNameInCertificate 지정되지 않았거나 설정 null 되면 드라이버는 속성 값을 호스트 이름으로 사용하여 ServerName SQL Server TLS/SSL 인증서의 유효성을 검사합니다. |