TDS 8.0
적용 대상: 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 및 기타 웹 프로토콜에 맞춥니다. 이는 TDS 트래픽 관리 효율성에 크게 기여합니다. 이제 표준 네트워크 어플라이언스가 SQL 쿼리를 필터링하고 안전하게 통과시킬 수 있기 때문입니다.
TDS 이전 버전과 비교할 때 TDS 8.0의 또 다른 이점은 TLS 1.3 및 향후 TLS 표준과의 호환성입니다. TDS 8.0은 TLS 1.2 및 이전 TLS 버전과도 완벽하게 호환됩니다.
TDS 작동 방식
TDS(Tabular Data Stream) 프로토콜은 클라이언트와 데이터베이스 서버 시스템 간의 요청 및 응답 전송에 사용되는 애플리케이션 수준 프로토콜입니다. 이러한 시스템에서 클라이언트는 일반적으로 서버와 수명이 긴 연결을 설정합니다. 연결이 전송 수준 프로토콜을 사용하여 설정되면 TDS 메시지가 클라이언트와 서버 간에 통신하는 데 사용됩니다.
TDS 세션 수명 동안에 다음 세 단계가 있습니다.
- 초기화
- 인증
- 데이터 교환
암호화는 초기 단계에서 협상되지만 TDS 협상은 암호화되지 않은 연결을 통해 이루어집니다. SQL Server 연결은 TDS 8.0 이전 버전에서 다음과 같이 표시됩니다.
TCP 핸드셰이크 ➡️ TDS 사전 로그인(일반 텍스트) 및 응답(일반 텍스트) ➡️ TLS 핸드셰이크 ➡️ 인증(암호화됨) ➡️ 데이터 교환(암호화될 수도 암호화되지 않을 수도 있음)
TDS 8.0 도입 후 SQL Server 연결은 다음과 같습니다.
TCP 핸드셰이크 ➡️ TLS 핸드셰이크 ➡️ TDS 사전 로그인(암호화됨) 및 응답(암호화됨) ➡️ 인증(암호화됨) ➡️ 데이터 교환(암호화됨)
엄격한 연결 암호화
TDS 8.0을 사용하기 위해 SQL Server 2022(16.x)는 strict
을(를) SQL Server 드라이버(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 네트워크 구성에서 TDS 8.0과 함께 추가된 Force Strict Encryption
옵션은 모든 클라이언트가 암호화 유형으로 strict
을(를) 사용하도록 강제합니다. strict
연결 암호화를 사용하지 않는 모든 클라이언트 또는 기능은 SQL Server에 연결하지 못합니다.
다음 기능 또는 도구는 TDS 8.0을 지원하지 않는 이전 버전의 드라이버를 계속 사용하므로 strict
연결 암호화와 함께 제대로 작동하지 않을 수 있습니다.
- Always On 가용성 그룹
- Always On FCI(장애 조치(failover) 클러스터 인스턴스)
- SQL Server 복제
- 로그 전달
- sqlcmd 유틸리티
- bcp 유틸리티
- SQL Server CEIP 서비스
- SQL Server 에이전트
- 데이터베이스 메일
- 연결된 서버
- SQL Server에 대한 Polybase 커넥터
연결 문자열 암호화 속성에 대한 추가 변경 내용
암호화를 위해 연결 문자열에 추가된 항목은 다음과 같습니다.
키워드 | 기본값 | 설명 |
---|---|---|
Encrypt |
false | 기존 동작true 인 경우 서버에 인증서가 설치되어 있으면 SQL Server는 클라이언트와 서버 간에 전송된 모든 데이터에 대해 TLS 암호화를 사용합니다. 인식되는 값은 true , false , yes 및 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 | 기존 동작 드라이버가 서버 TLS/SSL 인증서의 유효성을 검사하지 않도록 지정하려면 true 로 설정합니다. true 이면, 통신 계층이 TLS를 사용하여 암호화된 경우 서버 TLS/SSL 인증서가 자동으로 신뢰됩니다.false 이면, 드라이버가 서버 TLS/SSL 인증서의 유효성을 검사합니다. 서버 인증서 유효성 검사에 실패하면 드라이버에서 오류가 발생하고 연결이 닫힙니다. 기본값은 false 입니다. TLS/SSL 연결이 성공하려면 serverName 에 전달된 값이 서버 인증서의 Subject Alternate Name 에 있는 Common Name (CN) 또는 DNS 이름과 정확히 일치해야 합니다.Microsoft ODBC Driver 18 for SQL Server의 동작 변경 설정된 strict 경우 Encrypt 이 설정은 서버 인증서 유효성 검사에 사용할 인증서의 위치를 지정합니다(정확히 일치). 이 드라이버는 PEM, DER 및 CER 파일 확장자를 지원합니다.Encrypt true 설정되거나 false 설정 TrustServerCertificate 되고 속성이 지정되지 null 않거나 , false true 또는 드라이버가 연결 URL의 ServerName 속성 값을 호스트 이름으로 사용하여 SQL Server TLS/SSL 인증서의 유효성을 검사합니다. |
HostNameInCertificate |
null | SQL Server TLS/SSL 인증서의 유효성을 검사할 때 사용할 호스트 이름입니다. 속성이 HostNameInCertificate 지정되지 않았거나 설정 null 되면 드라이버는 속성 값을 호스트 이름으로 사용하여 ServerName SQL Server TLS/SSL 인증서의 유효성을 검사합니다. |