적용 대상: SQL Server
Azure SQL 데이터베이스
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System(PDW)
중요합니다
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)는 인증서 유효성 검사를 통해서만 안전하게 만들 수 있습니다.
애플리케이션은 연결 문자열 키워드 또는 연결 속성을 사용하여 모든 네트워크 트래픽의 암호화를 요청할 수도 있습니다. 키워드는 공급자 문자열을 사용하는 경우 ODBC 및 OLE DB의 경우 "암호화"이며, 초기화 문자열 IDbInitialize::Initialize
을 사용할 때는 ADO 및 OLE DB에 대해 "데이터 암호화 사용"입니다 IDataInitialize
. 프로토콜 암호화 강제 옵션을 사용하고 암호화된 연결을 요청하도록 클라이언트를 구성하여 SQL Server 구성 관리자에서 구성할 수도 있습니다. 기본적으로 연결에 대한 모든 네트워크 트래픽을 암호화하려면 인증서가 서버에 프로비전되어야 합니다. 클라이언트가 서버에서 인증서를 신뢰하도록 설정하면 중간에서 맨 인 더 미들 공격에 취약합니다. 서버에 확인 가능한 인증서를 배포하는 경우 인증서 신뢰에 대한 클라이언트 설정을 변경해야 합니다 FALSE
.
연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.
서버에서 인증서가 프로비전되지 않은 경우 암호화를 사용하도록 설정하기 위해 SQL Server Configuration Manager를 사용하여 프로토콜 암호화 강제 적용 및 보안 서버 인증서 옵션을 모두 설정할 수 있습니다. 이 경우 암호화는 서버에 프로비전된 확인 가능한 인증서가 없는 경우 유효성 검사 없이 자체 서명된 서버 인증서를 사용합니다.
애플리케이션은 키워드 또는 연결된 연결 특성을 사용하여 TrustServerCertificate
암호화가 이루어지도록 보장할 수도 있습니다. 애플리케이션 설정은 SQL Server 클라이언트 구성 관리자에서 설정한 보안 수준을 줄이지 않지만 강화시킬 수 있습니다. 예를 들어 강제 프로토콜 암호화 가 클라이언트에 대해 설정되지 않은 경우 애플리케이션에서 암호화 자체를 요청할 수 있습니다. 서버 인증서가 프로비전되지 않은 경우에도 암호화를 보장하기 위해 애플리케이션에서 암호화를 TrustServerCertificate
요청하고 . 그러나 클라이언트 구성에서 사용하도록 설정되지 않은 경우 TrustServerCertificate
프로비전된 서버 인증서는 여전히 필요합니다. 다음 표에서는 모든 사례를 설명합니다.
프로토콜 암호화 강제 사용 클라이언트 설정 | 서버 인증서 신뢰 클라이언트 설정 | 연결 문자열/연결 특성 Encrypt/Use Encryption for Data | 연결 문자열/연결 특성 서버 인증서 신뢰 | 결과 |
---|---|---|---|---|
아니요 | 해당 없음 | 아니요(기본값) | 무시됨 | 암호화가 수행되지 않습니다. |
아니요 | 해당 없음 | 예 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
아니요 | 해당 없음 | 예 | 예 | 암호화는 항상 발생하지만 자체 서명된 서버 인증서를 사용할 수 있습니다. |
예 | 아니요 | 무시됨 | 무시됨 | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
예 | 예 | 아니요(기본값) | 무시됨 | 암호화는 항상 발생하지만 자체 서명된 서버 인증서를 사용할 수 있습니다. |
예 | 예 | 예 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
예 | 예 | 예 | 예 | 암호화는 항상 발생하지만 자체 서명된 서버 인증서를 사용할 수 있습니다. |
주의
위의 표에서는 다양한 구성에서 시스템 동작에 대한 지침만 제공합니다. 보안 연결을 위해 클라이언트와 서버 모두 암호화가 필요한지 확인합니다. 또한 서버에 확인 가능한 인증서가 있고 클라이언트의 TrustServerCertificate
설정이 .로 설정되어 있는지 확인합니다 FALSE
.
SQL Server Native Client OLE DB 공급자
SQL Server Native Client OLE DB 공급자는 속성 집합에서 구현되는 데이터 원본 초기화 속성을 추가하여 SSPROP_INIT_TRUST_SERVER_CERTIFICATE
유효성 검사 없이 암호화를 DBPROPSET_SQLSERVERDBINIT
지원합니다. 또한 새 연결 문자열 키워드가 TrustServerCertificate
추가되었습니다. 허용 yes
또는 no
값 no
입니다. 기본값입니다. 서비스 구성 요소를 사용할 때는 허용 true
또는 false
값 false
이 기본값입니다.
속성 집합의 향상된 기능 DBPROPSET_SQLSERVERDBINIT
과 대한 자세한 내용은 초기화 및 권한 부여 속성(네이티브 클라이언트 OLE DB 공급자)을 참조하세요.
SQL Server Native Client ODBC 드라이버
SQL Server Native Client ODBC 드라이버는 SQLSetConnectAttr 및 SQLGetConnectAttr 함수를 추가하여 유효성 검사 없이 암호화를 지원합니다.
SQL_COPT_SS_TRUST_SERVER_CERTIFICATE
은 기본값으로 SQL_TRUST_SERVER_CERTIFICATE_NO
사용하거나 SQL_TRUST_SERVER_CERTIFICATE_NO
허용 SQL_TRUST_SERVER_CERTIFICATE_YES
하도록 추가되었습니다. 또한 새 연결 문자열 키워드가 TrustServerCertificate
추가되었습니다. 허용 yes
또는 no
값 no
입니다. 기본값입니다.