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