SQL Server Native Client에서 유효성 검사 없이 암호화 사용
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
Important
SNAC(SQL Server Native Client)는 다음과 함께 제공되지 않습니다.
- SQL Server 2022(16.x) 이상 버전
- SQL Server Management Studio 19 이상 버전
SQL Server Native Client(SQLNCLI 또는 SQLNCLI11)와 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새로운 응용 프로그램 개발에 권장되지 않습니다.
새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.
SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.
SQL Server에서는 로그인과 관련한 네트워크 패킷이 항상 암호화됩니다. 인증서가 시작될 때 서버에 프로비전되지 않은 경우 SQL Server는 로그인 패킷을 암호화하는 데 사용되는 자체 서명된 인증서를 생성합니다.
자체 서명된 인증서는 보안을 보장하지 않습니다. 암호화된 핸드셰이크는 NTLM(NT LAN Manager)을 기반으로 합니다. 보안 연결을 위해 SQL Server에 확인할 수 있는 인증서를 프로비전하는 것이 좋습니다. TLS(Transport Security Layer)는 인증서 유효성 검사를 통해서만 안전하게 만들 수 있습니다.
애플리케이션에 따라 연결 문자열 키워드나 연결 속성을 사용하여 모든 네트워크 트래픽을 암호화해야 할 수도 있습니다. IDbInitialize::Initialize와 함께 공급자 문자열을 사용하는 경우 ODBC 및 OLE DB에 대한 키워드는 "암호화"이거나, IDataInitialize에서 초기화 문자열을 사용하는 경우 ADO 및 OLE DB에 대해 "데이터 암호화 사용"입니다. 프로토콜 암호화 강제 옵션을 사용하는 SQL Server 구성 관리자 암호화된 연결을 요청하도록 클라이언트를 구성하여 구성할 수도 있습니다. 기본적으로 연결에 대한 모든 네트워크 트래픽을 암호화하려면 서버에서 인증서를 프로비전해야 합니다. 서버에서 인증서를 신뢰하도록 클라이언트를 설정하면 메시지 가로채기(man-in-the-middle) 공격에 취약해질 수 있습니다. 서버에 확인 가능한 인증서를 배포하는 경우 인증서 신뢰에 대한 클라이언트 설정을 FALSE로 변경해야 합니다.
연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.
서버에서 인증서가 프로비전되지 않은 경우 암호화를 사용하도록 설정하려면 SQL Server 구성 관리자 사용하여 프로토콜 암호화 강제 및 보안 서버 인증서 옵션을 모두 설정할 수 있습니다. 이 경우 확인할 수 있는 인증서가 서버에 제공되지 않으면 유효성 검사 없이 자체 서명된 서버 인증서가 암호화에 사용됩니다.
애플리케이션은 "TrustServerCertificate" 키워드 또는 연결된 연결 특성을 사용하여 암호화가 수행되도록 보장할 수도 있습니다. 애플리케이션 설정은 SQL Server 클라이언트 구성 관리자에서 설정한 보안 수준을 줄이지 않지만 강화시킬 수 있습니다. 예를 들어 클라이언트에 대해 프로토콜 암호화 강제 사용 옵션을 설정하지 않았지만 애플리케이션 자체에서 암호화를 요청할 수 있습니다. 또한 서버 인증서가 제공되지 않은 경우에도 암호화를 보장할 수 있도록 애플리케이션에서 암호화 및 "TrustServerCertificate"를 요청할 수도 있습니다. 그러나 클라이언트 구성에 "TrustServerCertificate"가 설정되어 있지 않은 경우에는 제공된 서버 인증서가 필요합니다. 다음 표에서는 모든 사례를 설명합니다.
프로토콜 암호화 강제 사용 클라이언트 설정 | 서버 인증서 신뢰 클라이언트 설정 | 연결 문자열/연결 특성 Encrypt/Use Encryption for Data | 연결 문자열/연결 특성 서버 인증서 신뢰 | 결과 |
---|---|---|---|---|
아니요 | 해당 없음 | 아니요(기본값) | 무시됨 | 암호화가 수행되지 않습니다. |
아니요 | 해당 없음 | 예 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
아니요 | 해당 없음 | 예 | 예 | 항상 암호화가 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
예 | 아니요 | 무시됨 | 무시됨 | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
예 | 예 | 아니요(기본값) | 무시됨 | 항상 암호화가 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
예 | 예 | 예 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
예 | 예 | 예 | 예 | 암호화는 항상 발생하지만 자체 서명된 서버 인증서를 사용할 수 있습니다. |
주의
위의 표에서는 다양한 구성에서 시스템 동작에 대한 지침만 제공합니다. 보안 연결을 위해 클라이언트와 서버 모두 암호화가 필요한지 확인하세요. 또한 서버에 확인 가능한 인증서가 있고 클라이언트의 TrustServerCertificate 설정이 FALSE로 설정되어 있는지 확인합니다.
SQL Server Native Client OLE DB 공급자
SQL Server Native Client OLE DB 공급자는 DBPROPSET_SQLSERVERDBINIT 속성 집합에 구현되는 SSPROP_INIT_TRUST_SERVER_CERTIFICATE 데이터 원본 초기화 속성을 추가하여 유효성 검사 없이 암호화를 지원합니다. 또한 추가된 새 연결 문자열 키워드인 "TrustServerCertificate"가 추가되었습니다. 예 또는 아니요 값을 허용합니다. 기본값은 no입니다. 서비스 구성 요소를 사용하는 경우 true 또는 false 값을 허용합니다. false가 기본값입니다.
DBPROPSET_SQLSERVERDBINIT 속성 집합의 향상된 기능과 대한 자세한 내용은 초기화 및 권한 부여 속성을 참조 하세요.
SQL Server Native Client ODBC 드라이버
SQL Server Native Client ODBC 드라이버는 SQLSetConnectAttr 및 SQLGetConnectAttr 함수를 추가하여 유효성 검사 없이 암호화를 지원합니다. SQL_TRUST_SERVER_CERTIFICATE_YES 또는 SQL_TRUST_SERVER_CERTIFICATE_NO 허용하도록 SQL_COPT_SS_TRUST_SERVER_CERTIFICATE 추가되었으며 SQL_TRUST_SERVER_CERTIFICATE_NO 기본값입니다. 또한 새 연결 문자열 키워드 "TrustServerCertificate"가 추가되었습니다. 이 문자열 키워드는 예 또는 아니요 값을 받으며, 기본값은 "아니요"입니다.