Http.sys를 사용하여 Kerberos 서비스 사용자 이름 등록

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

CREATE ENDPOINT나 ALTER ENDPOINT를 사용하여 HTTP 끝점을 만들거나 수정할 때 끝점에 HTTP SOAP 요청을 보내는 사용자를 인증하는 데 사용할 인증 유형을 지정합니다. 자세한 내용은 CREATE ENDPOINT(Transact-SQL)ALTER ENDPOINT(Transact-SQL)를 참조하십시오.

CREATE ENDPOINT나 ALTER ENDPOINT를 사용하여 다음과 같은 방식으로 Kerberos 인증을 지원하도록 끝점을 구성할 수 있습니다.

  • AUTHENTICATION=KERBEROS를 설정하면 Kerberos가 유일한 HTTP 인증 수단으로 사용됩니다.

  • AUTHENTICATION=INTEGRATED를 설정하면 인증 시도 동안 끝점에 대한 HTTP 인증에서 NEGOTIATE, KERBEROS 및 NTLM 옵션을 제공할 수 있습니다. NEGOTIATE 옵션을 사용하면 클라이언트와 서버가 Kerberos 기반 인증을 설정하려고 합니다. 클라이언트가 Kerberos를 지원하지 않거나 협상이 불가능하면 인증이 NTLM으로 대체됩니다. NEGOTIATE를 사용할 때 클라이언트가 NTLM으로 대체되지 않게 하려면 클라이언트에서 끝점에 AUTHENTICATION=KERBEROS를 설정하는 것이 좋습니다.

Kerberos에서 상호 인증을 지원하려면 로컬 시스템 계정이나 도메인 사용자 계정 등의 SQL Server 2005 또는 SQL Server 2008 인스턴스 실행 계정과 SPN(서비스 사용자 이름)을 연결해야 합니다. 특정 SQL Server 인스턴스의 SPN 등록에 대한 세부 사항은 해당 인스턴스 구성 시 사용한 서비스 계정 유형에 따라 결정됩니다. SQL Server가 로컬 시스템 계정이나 네트워크 서비스 계정으로 실행되고 있으면 해당 컴퓨터 이름으로 SPN을 등록해야 합니다. SQL Server가 도메인 사용자 계정으로 실행되고 있으면 해당 도메인 사용자 이름으로 SPN을 등록해야 합니다.

SetSPN.exe 사용

SQL Server 2005 또는 SQL Server 2008 인스턴스 실행 계정과 SPN 연결을 설정하려면 Windows SetSPN.exe 지원 도구를 사용합니다. 이 도구는 SQL Server 인스턴스가 실행되고 있는 컴퓨터 계정에 대한 SPN을 Active Directory에 있는 Windows 도메인 서비스 사용자 계정 아래에 추가합니다. 이 시나리오에서는 SetSPN.exe 도구를 사용하여 NetBIOS에 대한 SPN 이름과 정규화된 DNS에 대한 SPN 이름을 추가할 수 있습니다.

예를 들어 MyComputer로 실행되고 있는 SQL Server 인스턴스에서 SetSPN.exe 도구를 실행하면 다음 두 개의 SPN이 SQL Server 인스턴스 실행 계정에 연결되고 디렉터리에 추가되어야 합니다.

HTTP/MyComputer;
HTTP/MyComputer.fully.qualified.domain.name.com

한 계정에 SPN이 여러 개 있을 수 있지만 한 SPN을 여러 계정에 등록할 수는 없습니다.

NetBIOS와 정규화된 DNS에 대한 두 개의 같은 SPN 이름을 삭제하려는 경우에도 SetSPN.exe를 사용합니다.

고려 사항

  • Httpcfg.exe와 마찬가지로 SetSPN.exe는 Windows Server 2003에서 사용할 수 있으며 Httpcfg.exe 및 기타 Windows 지원 도구와 같은 절차로 설치됩니다. 자세한 내용은 HTTP 커널 모드 드라이버(Http.sys) 구성을 참조하십시오.

  • SQL Server 인스턴스가 로컬 시스템 계정으로 실행되고 있지 않을 경우 DOMAIN ADMIN 권한이 있는 통합 인증 사용자만 SetSPN.exe 도구를 사용하여 SPN 등록을 변경할 수 있습니다.

  • SQL Server 인스턴스가 로컬 시스템 계정으로 실행되고 있을 경우 SQL Serversysadmin 고정 서버 역할의 멤버만 SetSPN.exe 도구를 사용하여 SPN 등록을 변경할 수 있습니다.

  • 서비스 계정이 로컬 시스템 계정일 경우 SetSPN.exe 도구를 사용할 필요 없이 컴퓨터의 Active Directory 계정에 SPN이 추가됩니다.

SetSPN.exe 구문

SetSPN.exe 구문은 다음과 같습니다.

setspn { -ASPN | -DSPN | -L } service_account

인수

  • -A
    계정에 지정한 SPN을 추가합니다.

  • -D
    계정에서 지정한 SPN을 삭제합니다.

  • -L
    계정에 등록된 모든 SPN을 나열합니다.

SQL Server 인스턴스가 MySQLHost라는 컴퓨터에서 도메인 사용자 MyDomain\MySQLAccount로 실행되고 있는 경우 다음 명령을 사용하여 해당 SPN을 설정할 수 있습니다.

setspn –A http/MySQLHost MyDomain\MySQLAccount
setspn –A http/MySqlHost.Mydomain.Mycorp.com MyDomain\MySQLAccount

한 계정에 각 서비스나 호스트 이름에 대해 하나씩 SPN이 여러 개 있을 수 있지만 SPN은 한 계정에만 등록할 수 있습니다. 여러 계정에 같은 SPN을 등록하면 Kerberos 인증이 실패합니다.

예를 들어 MyDomain\MySQLAccount 계정에 다음과 같이 여러 개의 SPN을 등록할 수 있습니다. 처음 두 명령은 두 개의 다른 서비스인 http와 rpc에 대한 것입니다. 마지막 명령은 다른 호스트 이름에 대한 것으로 컴퓨터에 여러 호스트 이름이 있는 것으로 가정합니다.

setspn –A http/MySQLHost MyDomain\MySQLAccount
setspn –A rpc/MySQLHost MyDomain\MySQLAccount
setspn –A http/MySecondHost MyDomain\MySQLAccount

반대로 다음 시나리오는 Kerberos 오류를 일으킵니다.

setspn –A http/MySQLHost MyDomain\MySQLAccountOne
setspn –A http/MySQLHost MyDomain\MySQLAccountTwo

두 개의 다른 서비스 계정인 MySQLAccountOne과 MySQLAccountTwo로 실행되고 있는 컴퓨터에 SQL Server 인스턴스가 두 개 있기 때문에 오류가 발생합니다. 각 SQL Server 인스턴스에 대해 하나씩 두 개의 SPN을 등록할 수 없습니다.

여러 SQL Server 인스턴스가 같은 컴퓨터에서 다른 계정으로 실행되는 경우에 이 규칙이 적용됩니다. SPN은 한 계정에만 등록할 수 있습니다. 여러 SQL Server 인스턴스(예: Inst1Inst2)를 IIS 등의 다른 응용 프로그램과 함께 사용해야 하고 모든 서비스에 HTTP Kerberos 인증을 사용하려면 다음 옵션 중 하나를 사용하여 SPN 등록 충돌을 해결합니다.

  • 모든 인스턴스와 응용 프로그램을 같은 계정으로 실행합니다.

    예를 들어 Inst1, Inst2 및 IIS를 모두 LocalSystem이나 Mydomain\MyServiceAccount로 실행합니다.

  • 같은 컴퓨터에 여러 개의 호스트 이름을 등록하고 각 인스턴스와 응용 프로그램에서 다른 호스트를 수신하도록 합니다. 이러한 경우 다음 작업을 수행해야 합니다.

    • 컴퓨터에 대해 3개의 다른 호스트 이름을 만듭니다.

    • 다른 응용 프로그램에 각 호스트를 할당합니다.

    • 각 호스트 이름과 응용 프로그램 조합에 대해 하나씩 3개의 SPN 집합을 등록합니다.

Kerberos SPN 등록 문제 해결

가장 일반적인 Kerberos SPN 등록 문제는 다음과 같습니다.

  • SPN이 등록되어 있지 않습니다.

    SPN이 등록되어 있지 않으면 SQL Server 인스턴스가 실행되고 있는 로컬 컴퓨터에서 Kerberos 인증이 진행되지만 원격 클라이언트 컴퓨터에서 실패하게 됩니다.

  • SPN이 여러 번 등록되어 있습니다.

    관리자가 도메인 디렉터리에서 SPN을 복제하여 Kerberos 인증이 실패하는 몇 가지 시나리오가 있습니다. 다음과 같은 경우가 여기에 해당합니다.

    • SQL Server 인스턴스가 실행되는 도메인 계정 변경

      예를 들어 SQL Server 인스턴스가 도메인 계정 DOMAIN\User1로 실행되고 있는 동안 SetSpn.exe를 실행하고 SetSpn.exe를 다시 실행할 때 SQL Server 실행에 사용되는 도메인 계정이 DOMAIN\User2로 변경되어 있으면 두 계정의 디렉터리에 같은 SPN이 삽입됩니다.

    • 다른 계정으로 실행되는 여러 SQL Server 인스턴스 설치

      여러 SQL Server 인스턴스를 설치하고 각 인스턴스를 다른 계정으로 실행하는 경우 각 인스턴스에서 SetSpn.exe를 실행하면 각 SQL Server 서비스 계정 아래의 디렉터리에 중복 계정이 생깁니다. 이는 도메인 사용자 계정과 로컬 시스템 계정으로 실행되고 있는 두 인스턴스에 모두 적용됩니다.

    • 다른 계정으로 SQL Server 인스턴스 제거 및 다시 설치

      한 계정으로 SQL Server를 설치하고 SPN을 등록한 후 다른 계정으로 SQL Server를 제거한 다음 다시 설치하고 SPN을 다시 등록하면 각 도메인 계정이 같은 SPN을 가지게 됩니다. 즉, SPN이 중복됩니다.

위의 각 시나리오에서는 해당 문제가 해결될 때까지 HTTP 끝점이 NTLM 인증으로 대체됩니다. 이러한 경우 대개 디렉터리에서 중복 SPN이나 부실 SPN을 찾아 수동으로 제거해야 합니다.