SQL Server Native Client의 클라이언트 연결에서 SPN(서비스 사용자 이름) 지원
적용 대상: 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 이상 버전
SQLNCLI 또는 SQLNCLI11(SQL Server Native Client) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 애플리케이션 개발에 권장되지 않습니다.
새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.
SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.
SQL Server 2008(10.0.x)부터는 모든 프로토콜에서 상호 인증을 지원하도록 SPN(서비스 사용자 이름)이 확장되었습니다. 이전 버전의 SQL Server에서 SPN은 Active Directory에 SQL Server 인스턴스에 대한 기본 SPN이 등록된 경우 TCP를 사용하는 Kerberos에 대해서만 지원되었습니다.
SPN은 SQL Server 인스턴스가 실행되는 계정을 확인하기 위해 인증 프로토콜에 의해 사용됩니다. 인스턴스 계정이 알려진 경우 Kerberos 인증을 사용하여 클라이언트와 서버에 의한 상호 인증을 제공할 수 있습니다. 인스턴스 계정을 알 수 없는 경우 서버에서 클라이언트 인증만 제공하는 NTLM 인증이 사용됩니다. 현재 SQL Server Native Client는 인스턴스 이름 및 네트워크 연결 속성에서 SPN을 파생하여 인증 조회를 수행합니다. SQL Server 인스턴스는 시작 시에 SPN 등록을 시도하며 또는 수동으로 등록할 수도 있습니다. SPN을 등록하려고 시도하는 계정에 액세스 권한이 충분하지 않은 경우 등록은 실패하게 됩니다.
도메인 및 컴퓨터 계정은 Active Directory에 자동으로 등록됩니다. SPN으로 사용하거나 관리자가 자체 SPN을 정의할 수 있습니다. SQL Server는 클라이언트에서 사용할 SPN을 직접 지정하도록 허용하여 보안 인증의 관리성과 안정성을 더 높여 줍니다.
참고
클라이언트 애플리케이션에서 지정한 SPN은 Windows 통합 보안으로 연결이 설정되는 경우에만 사용됩니다.
팁
SQL Server용 Microsoft Kerberos 구성 관리자는 SQL Server과의 Kerberos 관련 연결 문제를 해결하는 진단 도구입니다. 자세한 내용은 SQL Server용 Microsoft Kerberos 구성 관리자를 참조하십시오.
Kerberos에 대한 자세한 내용은 다음 문서를 참조하십시오.
사용량
다음 표에서는 클라이언트 애플리케이션이 보안 인증을 사용할 수 있는 가장 일반적인 시나리오에 대해 설명합니다.
시나리오 | 설명 |
---|---|
레거시 애플리케이션은 SPN을 지정하지 않습니다. | 이 호환성 시나리오는 이전 버전의 SQL Server용으로 개발된 애플리케이션의 동작에 변화가 없을 것임을 보장합니다. 지정된 SPN이 없으면 해당 애플리케이션은 생성된 SPN에 의존하며, 어떤 인증 방법이 사용되는지 알 수 없습니다. |
현재 버전의 SQL Server Native Client를 사용하는 클라이언트 애플리케이션은 연결 문자열 SPN을 도메인 사용자 또는 컴퓨터 계정, 인스턴스별 SPN 또는 사용자 정의 문자열로 지정합니다. | ServerSPN 키워드는 공급자, 초기화 또는 연결 문자열 사용하여 다음을 수행할 수 있습니다. -SQL Server 인스턴스에서 연결에 사용하는 계정을 지정합니다. 이렇게 하면 Kerberos 인증에 대한 액세스가 간소화됩니다. Kerberos KDC(키 배포 센터)가 있고 올바른 계정이 지정된 경우 NTLM보다 Kerberos 인증이 사용될 가능성이 더 높습니다. KDC는 일반적으로 도메인 컨트롤러와 동일한 컴퓨터에 상주합니다. -SQL Server 인스턴스에 대한 서비스 계정을 조회하기 위해 SPN을 지정합니다. 모든 SQL Server 인스턴스에 대해 이 용도로 사용할 수 있는 두 개의 기본 SPN이 생성됩니다. 그러나 이러한 키는 Active Directory에 있다고 보장되지 않으므로 이 경우 Kerberos 인증이 보장되지 않습니다. -SQL Server 인스턴스에 대한 서비스 계정을 조회하는 데 사용될 SPN을 지정합니다. 서비스 계정에 매핑되는 사용자 정의 문자열일 수 있습니다. 이 경우 키는 KDC에 수동으로 등록해야 하며 사용자 정의 SPN에 대한 규칙을 충족해야 합니다. FailoverPartnerSPN 키워드를 사용하여 장애 조치(Failover) 파트너 서버에 대한 SPN을 지정할 수 있습니다. 계정 및 Active Directory 키 값의 범위는 주 서버에 지정할 수 있는 값과 동일합니다. |
ODBC 애플리케이션은 SPN을 주 서버 또는 장애 조치(failover) 파트너 서버에 대한 연결 특성으로 지정합니다. | 연결 특성 SQL_COPT_SS_SERVER_SPN 사용하여 주 서버에 대한 연결에 대한 SPN을 지정할 수 있습니다. 연결 특성 SQL_COPT_SS_FAILOVER_PARTNER_SPN 사용하여 장애 조치(failover) 파트너 서버에 대한 SPN을 지정할 수 있습니다. |
OLE DB 애플리케이션이 주 서버 또는 장애 조치 파트너 서버에 대한 데이터 원본 초기화 속성으로 SPN을 지정합니다. | SSPROP_INIT_SERVER_SPN 속성 집합의 DBPROPSET_SQLSERVERDBINIT 연결 속성을 사용하여 연결에 대한 SPN을 지정할 수 있습니다. SSPROP_INIT_FAILOVER_PARTNER_SPN 의 DBPROPSET_SQLSERVERDBINIT 연결 속성을 사용하여 장애 조치 파트너 서버에 대한 SPN을 지정할 수 있습니다. |
사용자가 ODBC DSN(데이터 원본 이름)에 서버 또는 장애 조치 파트너 서버에 대한 SPN을 지정합니다. | SPN은 DSN 설치 대화 상자를 통해 ODBC DSN에서 지정할 수 있습니다. |
사용자가 OLE DB 데이터 연결 또는 로그인 대화 상자에 서버 또는 장애 조치 파트너 서버에 대한 SPN을 지정합니다. | SPN은 데이터 연결 또는 로그인 대화 상자에 지정할 수 있습니다. 로그인 대화 상자는 ODBC 또는 OLE DB에서 사용할 수 있습니다. |
ODBC 애플리케이션은 연결을 설정하는 데 사용되는 인증 방법을 결정합니다. | 연결이 성공적으로 열리면 애플리케이션은 SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD 연결 특성을 쿼리하여 사용된 인증 방법을 확인할 수 있습니다. 값에는 NTLM , Kerberos등이 포함됩니다. |
OLE DB 애플리케이션이 연결을 설정하는 데 사용된 인증 방법을 확인합니다. | 연결이 성공적으로 열리면 애플리케이션은 SSPROP_AUTHENTICATION_METHOD 속성 집합의 DBPROPSET_SQLSERVERDATASOURCEINFO 연결 속성을 쿼리하여 사용된 인증 방법을 확인할 수 있습니다. 값에는 NTLM , Kerberos등이 포함됩니다. |
장애 조치(Failover)
SPN이 장애 조치 캐시에 저장되지 않아 연결 간에 전달될 수 없습니다. 연결 문자열 또는 연결 특성에 SPN이 지정되면 주 서버 및 파트너 서버에 대한 모든 연결 시도에 SPN이 사용됩니다.
연결 풀링
애플리케이션에서는 전체 문자열이 아닌 일부에 SPN을 지정하면 풀 조각화가 발생할 수 있음을 인식해야 합니다.
애플리케이션은 연결 문자열 키워드를 지정하는 대신 프로그래밍 방식으로 SPN을 연결 특성으로 지정할 수 있습니다. 이렇게 하면 연결 풀 조각화를 관리하는 데 도움이 될 수 있습니다.
애플리케이션에서는 해당 연결 특성을 설정하여 연결 문자열의 SPN을 재정의할 수 있지만 연결 풀링에 사용되는 연결 문자열은 풀링을 위해 연결 문자열 값을 사용한다는 점을 인식해야 합니다.
하위 수준 서버 동작
새 연결 동작은 클라이언트에 의해 구현됩니다. 따라서 SQL Server 버전과 관련이 없습니다.
연결된 서버 및 위임
연결된 서버가 만들어질 때 sp_addlinkedserver 의 @provstr 매개 변수를 사용하여 서버 및 장애 조치 파트너 SPN을 지정할 수 있습니다. 이렇게 하면 클라이언트 연결 문자열 SPN을 지정하는 것과 같은 이점이 있습니다. Kerberos 인증을 사용하는 연결을 설정하는 것이 더 간단하고 안정적입니다.
연결된 서버를 사용한 위임에는 Kerberos 인증이 필요합니다.
애플리케이션에서 지정하는 SPN의 관리 측면
애플리케이션에서 SPN을 지정할지(연결 문자열를 통해) 또는 연결 속성을 통해 프로그래밍 방식으로(defalt 공급자 생성 SPN에 의존하지 않고) 선택할 때 다음 요소를 고려합니다.
보안: 지정된 SPN이 보호되는 정보를 공개하나요?
안정성: 기본 SPN 사용을 활성화하려면 SQL Server 인스턴스가 실행되는 서비스 계정에 KDC의 Active Directory를 업데이트할 수 있는 권한이 있어야 합니다.
편의성 및 위치 투명성: 데이터베이스가 다른 SQL Server 인스턴스로 이동되는 경우 애플리케이션의 SPN에 어떤 영향이 있나요? 데이터베이스 미러링을 사용하는 경우 주 서버와 해당 장애 조치(failover) 파트너 모두에 적용됩니다. 서버 변경 시 SPN도 변경해야 한다면 애플리케이션은 어떤 영향을 받습니까? 변경 내용은 관리됩니까?
SPN 지정
대화 상자 또는 코드에서 SPN을 지정할 수 있습니다. 이 섹션에서는 SPN을 지정하는 방법에 대해 설명합니다.
SPN의 최대 길이는 260자입니다.
SPN이 연결 문자열 또는 연결 특성에서 사용하는 구문은 다음과 같습니다.
구문 | Description |
---|---|
MSSQLSvc/fqdn | TCP 이외의 프로토콜이 사용될 때 기본 인스턴스에 대해 공급자가 생성하는 기본 SPN입니다. fqdn 은 정규화된 도메인 이름입니다. |
MSSQLSvc/fqdn:port | TCP가 사용될 때 공급자가 생성하는 기본 SPN입니다. port 는 TCP 포트 번호입니다. |
MSSQLSvc/fqdn:InstanceName | TCP 이외의 프로토콜이 사용될 때 명명된 인스턴스에 대해 공급자가 생성하는 기본 SPN입니다. InstanceName은 SQL Server 인스턴스 이름입니다. |
HOST/fqdn HOST/MachineName |
Windows에서 자동으로 등록되는 기본 제공 컴퓨터 계정에 매핑되는 SPN입니다. |
Username@Domain | 도메인 계정 직접 지정입니다. Username 은 Windows 사용자 계정 이름입니다. 도메인 은 Windows 도메인 이름 또는 정규화된 도메인 이름입니다. |
MachineName$@Domain | 컴퓨터 계정 직접 지정입니다. (연결하려는 서버가 LOCAL SYSTEM 또는 NETWORK SERVICE 계정에서 실행 중인 경우 Kerberos 인증 을 받으려면ServerSPN은 MachineName$@도메인 형식일 수 있습니다.) |
KDCKey/MachineName | 사용자가 지정한 SPN KDCKey 는 KDC 키에 대한 규칙을 따르는 영숫자 문자열입니다. |
SPN을 지원하는 ODBC 및 OLE DB 구문
구문 관련 정보는 다음 항목을 참조하세요.