Kerberos 연결의 서비스 사용자 이름 등록
적용 대상: SQL Server
SQL Server에서 Kerberos 인증을 사용하려면 다음 조건 둘 다에 해당되어야 합니다.
클라이언트 및 서버 컴퓨터는 동일한 Windows 도메인이나 트러스트된 도메인의 일부여야 합니다.
SPN(서비스 사용자 이름)은 Windows 도메인에서 키 배포 센터 역할을 가정하는 Active Directory에 등록해야 합니다. SPN은 등록된 후에 SQL Server 인스턴스 서비스를 시작한 Windows 계정에 매핑됩니다. SPN 등록이 수행되지 않았거나 실패하면 Windows 보안 계층이 SPN과 연결된 계정을 확인할 수 없으며 Kerberos 인증이 사용되지 않습니다.
참고
서버가 SPN을 자동으로 등록할 수 없으면 수동으로 SPN을 등록해야 합니다. 수동 SPN 등록을 참조하십시오.
sys.dm_exec_connections
동적 관리 뷰를 쿼리하여 연결에 Kerberos가 사용되는지 확인할 수 있습니다. 다음 쿼리를 실행하고, Kerberos를 사용할 수 있을 경우 KERBEROS
인 auth_scheme
열의 값을 확인하십시오.
SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
팁
SQL Server용 Microsoft Kerberos 구성 관리자는 SQL Server과의 Kerberos 관련 연결 문제를 해결하는 진단 도구입니다. 자세한 내용은 SQL Server용 Microsoft Kerberos 구성 관리자를 참조하십시오.
인증에서 SPN의 역할
애플리케이션에서 연결을 열고 Windows 인증을 사용하는 경우 SQL Server Native Client는 SQL Server 컴퓨터 이름과 인스턴스 이름 그리고 선택적으로 SPN을 전달합니다. 연결에서 SPN을 전달하면 SPN은 변경 없이 사용됩니다.
연결에서 SPN을 전달하지 않으면 사용된 프로토콜, 서버 이름 및 인스턴스 이름을 기반으로 기본 SPN이 생성됩니다.
위의 두 시나리오에서 SPN은 키 배포 센터에 전달되어 연결 인증을 위한 보안 토큰을 가져옵니다. 보안 토큰을 가져올 수 없으면 인증에서 NTLM을 사용합니다.
SPN은 클라이언트에서 서비스의 인스턴스를 고유하게 식별하는 이름입니다. Kerberos 인증 서비스에서는 서비스를 인증하는 데 SPN을 사용합니다. 클라이언트는 서비스에 연결할 때 서비스의 인스턴스를 찾고 해당 인스턴스에 대한 SPN을 작성한 다음 서비스에 연결하고 인증을 위해 서비스에 대한 SPN을 제공합니다.
참고 항목
이 문서의 정보는 클러스터링을 사용하는 SQL Server 구성에도 적용됩니다.
Windows 인증은 사용자를 SQL Server에 인증하는 데 사용하는 기본 인증 방법입니다. Windows 인증을 사용하는 클라이언트는 NTLM이나 Kerberos 중 하나를 사용하여 인증됩니다. Active Directory 환경에서는 항상 Kerberos 인증이 먼저 시도됩니다.
사용 권한
데이터베이스 엔진 서비스를 시작하면 서비스가 SPN(서비스 사용자 이름)을 등록하려고 합니다. SQL Server를 시작하는 계정에 Active Directory Domain Services에서 SPN을 등록할 권한이 없을 수 있습니다. 그러면 이 호출이 실패하고 애플리케이션 이벤트 로그 및 SQL Server 오류 로그 모두에 경고 메시지가 로그됩니다.
SPN을 등록하려면 데이터베이스 엔진이 Local System
(권장되지 않음)이나 NETWORK SERVICE
같은 기본 제공 계정 또는 SPN을 등록할 권한이 있는 계정으로 실행되고 있어야 합니다. 도메인 관리자 계정을 사용하여 SPN을 등록할 수 있지만 프로덕션 환경에서는 사용하지 않는 것이 좋습니다. 가상 계정 또는 MSA(관리 서비스 계정)를 사용하여 SQL Server를 실행할 수 있습니다. 가상 계정 및 MSA 모두 SPN을 등록할 수 있습니다. SQL Server가 이러한 계정 중 하나로 실행되고 있지 않으면 시작할 때 SPN이 등록되지 않으므로 도메인 관리자가 SPN을 수동으로 등록해야 합니다.
SPN 형식
SPN 형식은 TCP/IP, 명명된 파이프 및 공유 메모리에 대한 Kerberos 인증을 지원합니다. 명명된 인스턴스 및 기본 인스턴스에 대해 지원되는 SPN 형식은 다음과 같습니다.
명명된 인스턴스
MSSQLSvc/<FQDN>:[<port> | <instancename>], 각 항목이 나타내는 의미는 다음과 같습니다.
MSSQLSvc
는 등록할 서비스입니다.<FQDN>
은 서버의 정규화된 도메인 이름입니다.<port>
은 TCP 포트 번호입니다.<instancename>
은 SQL Server 인스턴스의 이름입니다.
기본 인스턴스
MSSQLSvc/<FQDN>:<port> | MSSQLSvc/<FQDN>, 각 항목이 나타내는 의미는 다음과 같습니다.
MSSQLSvc
는 등록할 서비스입니다.<FQDN>
은 서버의 정규화된 도메인 이름입니다.<port>
은 TCP 포트 번호입니다.
SPN 형식 | 설명 |
---|---|
MSSQLSvc/<FQDN>:<port> 1 |
TCP가 사용될 때 공급자가 생성하는 기본 SPN입니다. <port> 는 TCP 포트 번호입니다. |
MSSQLSvc/<FQDN> |
TCP 이외의 프로토콜이 사용될 때 기본 인스턴스에 대해 공급자가 생성하는 기본 SPN입니다. <FQDN> 은 정규화된 도메인 이름입니다. |
MSSQLSvc/<FQDN>:<instancename> |
TCP 이외의 프로토콜이 사용될 때 명명된 인스턴스에 대해 공급자가 생성하는 기본 SPN입니다. <instancename> 은 SQL Server 인스턴스의 이름입니다. |
1 SPN 형식에는 포트 번호가 필요하지 않습니다. 포트 번호를 사용하지 않는 다중 포트 서버 또는 프로토콜에서 Kerberos 인증을 여전히 사용할 수 있습니다.
SPN에 TCP 포트가 포함되어 있는 TCP/IP 연결의 경우 사용자가 Kerberos 인증을 사용하여 연결할 TCP 프로토콜을 SQL Server에서 사용하도록 설정해야 합니다.
SPN 자동 등록
SQL Server 데이터베이스 엔진 인스턴스가 시작되면 SQL Server에서 SQL Server 서비스 SPN을 등록하려고 합니다. 인스턴스가 중지되면 SQL Server에서 SPN 등록을 취소하려고 합니다. TCP/IP 연결의 경우 SPN은 형식 MSSQLSvc/<FQDN>:<tcpport>
으로 등록됩니다. 명명된 인스턴스와 기본 인스턴스는 모두 인스턴스를 구분하는 <tcpport>
값에 MSSQLSvc
으로 의존하여 등록됩니다.
Kerberos를 지원하는 다른 연결의 경우 SPN은 명명된 인스턴스에 대해 MSSQLSvc/<FQDN>:<instancename>
형식으로 등록됩니다. 기본 인스턴스는 MSSQLSvc/<FQDN>
형식으로 등록됩니다.
SQL Server 시작 계정에 권한을 부여하여 SPN을 등록하고 수정하려면 다음 단계를 수행합니다.
도메인 컨트롤러 머신에서 Active Directory 사용자 및 컴퓨터를 검색합니다.
보기 > 고급을 선택합니다.
컴퓨터 아래에서 SQL Server 컴퓨터를 찾은 다음, 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
보안 탭을 선택하고 고급을 선택합니다.
목록에서 SQL Server 시작 계정이 나열되지 않은 경우 추가를 선택하여 추가합니다. 추가되면 다음 단계를 수행합니다.
계정을 선택하고 편집을 선택합니다.
사용 권한 아래에서 유효성 검사된 쓰기 servicePrincipalName을 선택합니다.
아래로 스크롤하여 속성에서 다음을 선택합니다.
- Read servicePrincipalName(servicePrincipalName 읽기)
- Write servicePrincipalName(servicePrincipalName 쓰기)
확인을 두 번 선택합니다.
Active Directory 사용자 및 컴퓨터를 닫습니다.
서비스 계정에 이러한 동작을 수행하는 데 필요한 권한이 없는 경우에는 수동으로 SPN을 등록하거나 등록 취소해야 합니다.
수동 SPN 등록
SPN을 수동으로 등록하려면 Windows에 기본 제공되는 setspn 도구를 사용합니다. setspn.exe
는 SPN(서비스 사용자 이름) 디렉터리 속성을 읽고 수정하고 삭제하는 데 사용할 수 있는 명령줄 도구입니다. 또한 이 도구를 통해 현재 SPN을 보고 계정의 기본 SPN을 다시 설정하고 보조 SPN을 추가 또는 삭제할 수도 있습니다.
setspn 도구에 대한 자세한 내용과 필요한 권한, 사용 방법 예제는 setspn을 참조하세요.
다음 예에서는 도메인 사용자 계정으로 TCP/IP 연결용 SPN을 수동으로 등록하는 데 사용되는 구문을 보여 줍니다.
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname
참고
SPN이 이미 있는 경우에는 해당 SPN을 삭제한 후 다시 등록해야 합니다. -D
스위치와 함께 setspn을 사용하여 이 작업을 수행합니다. 다음 예에서는 새로운 인스턴스 기반 SPN을 수동으로 등록하는 방법을 보여 줍니다. 도메인 사용자 계정을 사용하는 기본 인스턴스의 경우 다음을 사용합니다.
setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname
명명된 인스턴스의 경우에는 다음을 사용합니다.
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname
Always On 가용성 그룹 구성에 대한 자세한 내용은 수신기 및 Kerberos(SPN)를 참조하세요.
클라이언트 연결
사용자 지정 SPN은 클라이언트 드라이버에서 지원됩니다. 하지만 SPN이 제공되지 않으면 클라이언트 연결 형식을 기반으로 SPN이 자동 생성됩니다. TCP 연결의 경우 명명된 인스턴스와 기본 인스턴스 모두에 대해 MSSQLSvc/FQDN:[<port>]
형식의 SPN이 사용됩니다.
명명된 파이프와 공유 메모리 연결에서 명명된 인스턴스에는 MSSQLSvc/<FQDN>:<instancename>
형식의 SPN이 사용되고 기본 인스턴스에는 MSSQLSvc/<FQDN>
형식의 SPN이 사용됩니다.
서비스 계정을 SPN으로 사용
서비스 계정을 SPN으로 사용할 수 있습니다. 서비스 계정은 Kerberos 인증에 대한 연결 특성을 통해 지정되며 다음 형식을 사용합니다.
도메인 사용자 계정
username\@domain
또는domain\username
Local System
또는NETWORK SERVICE
와 같은 컴퓨터 도메인 계정의 경우machine$\@domain
또는host\FQDN
입니다.
연결 인증 방법을 확인하려면 다음 쿼리를 실행합니다.
SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
인증 기본값
다음 표에서는 SPN 등록 시나리오에 따라 다르게 사용되는 인증 기본값에 대해 설명합니다.
시나리오 | 인증 방법 |
---|---|
SPN이 올바른 도메인 계정, 가상 계정, MSA 또는 기본 제공 계정에 매핑됩니다. 예를 들어 Local System 또는 NETWORK SERVICE 입니다. |
로컬 연결은 NTLM을 사용하고, 원격 연결은 Kerberos를 사용합니다. |
SPN이 올바른 도메인 계정, 가상 계정, MSA 또는 기본 제공 계정입니다. | 로컬 연결은 NTLM을 사용하고, 원격 연결은 Kerberos를 사용합니다. |
SPN이 잘못된 도메인 계정, 가상 계정, MSA 또는 기본 제공 계정에 매핑됩니다. | 인증에 실패하게 됩니다. |
SPN 조회에 실패하거나 SPN이 올바른 도메인 계정, 가상 계정, MSA 또는 기본 제공 계정에 매핑되지 않거나 SPN이 올바른 도메인 계정, 가상 계정, MSA 또는 기본 제공 계정이 아닙니다. | 로컬 및 원격 연결이 NTLM을 사용합니다. |
참고 항목
여기서 올바르다는 것은 등록된 SPN에 의해 매핑되는 계정이 SQL Server 서비스를 실행하고 있는 계정과 일치함을 의미합니다.
설명
DAC(관리자 전용 연결)는 인스턴스 이름 기반 SPN을 사용합니다. 해당 SPN이 성공적으로 등록되었으면 DAC에 Kerberos 인증을 사용할 수 있습니다. 또는 사용자가 계정 이름을 SPN으로 지정할 수 있습니다.
시작 시 SPN 등록에 실패하면 해당 내용이 SQL Server 오류 로그에 기록되고 시작이 계속됩니다.
종료 시 SPN 등록 취소에 실패하면 해당 내용이 SQL Server 오류 로그에 기록되고 종료가 계속됩니다.