서비스 사용자 이름 구성 상태

Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor (UnitMonitor)

이 모니터는 Microsoft® SQL Server™ 인스턴스 서비스 사용자 이름 구성의 상태를 확인합니다.

Knowledge Base article:

요약

이 모니터는 Microsoft® SQL Server™ 인스턴스의 SPN(서비스 사용자 이름) 구성을 확인합니다. 이 작업은 SQL Server 서비스 및 도메인 컨트롤러 구성을 비교하여 수행됩니다.

원인

SQL Server 데이터베이스 엔진의 SPN(서비스 사용자 이름)이 도메인의 Active Directory에서 누락되었거나, 위치가 잘못되었거나, 다른 SPN과 중복되었을 수 있습니다.

참고: 위치가 잘못된 SPN은 Active Directory의 잘못된 계정에 구성된 SPN입니다.

해결 방법

setspn.exeklist.exe 프로그램을 사용하면 이 문제를 해결할 수 있습니다.

두 도구 모두 Windows Server 2008 이상에서 제공됩니다. 이전 버전의 Windows에서는 Microsoft Download Center에서 별도로 다운로드하거나 Windows 지원 도구 패키지에서 가져와야 할 수 있습니다.

사례 1: 누락된 SPN 해결 방법:

1. 다음 명령을 실행하여 누락된 SPN 추가합니다.

setspn –A <SPN> <계정>

2. 클라이언트 응용 프로그램에서 SQL Server에 다시 연결해봅니다.

또는 SQL이 필요한 SPN을 자동으로 생성하도록 SQL Service 계정에 적합한 권한을 제공할 수 있습니다.

참고: SPN이 누락된 경우 연결 오류가 발생하지 않을 수 있지만 응용 프로그램이 Kerberos 인증을 사용할 수 없습니다.

사례 2: 위치가 잘못된 SPN 해결 방법:

1. 위치가 잘못된 SPN을 제거하려면 다음 명령을 실행합니다.

setspn –D <SPN> <계정>

2. 클라이언트 컴퓨터에서 로그오프한 후 다시 로그인하거나 다음 명령을 실행하여 Kerberos 티켓 캐시를 지웁니다.

klist purge

3. 클라이언트 응용 프로그램에서 SQL Server에 다시 연결해봅니다.

참고: 응용 프로그램에서 Kerberos를 사용하려면 위 사례 1의 해결 방법을 사용해서 올바른 SPN을 구성해야 합니다.

사례 3: 중복된 SPN 해결 방법:

1. 중복되어 제거해야 하는 SPN을 식별합니다.

2. 중복된 각 SPN을 제거하려면 다음 명령을 실행합니다.

setspn –D <SPN> <계정>

3. 클라이언트 컴퓨터에서 로그오프한 후 다시 로그인하거나 다음 명령을 실행하여 Kerberos 티켓 캐시를 지웁니다.

klist purge

4. 클라이언트 응용 프로그램에서 SQL Server에 다시 연결해봅니다.

외부

SPN이 잘못 구성된 경우 SQL Server에 대한 연결 문제가 발생할 수 있습니다.

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
Parent MonitorSystem.Health.ConfigurationState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.DBEngine.Configuration.SPNStatus
RemotableTrue
AccessibilityPublic
Alert Message
SPN(서비스 사용자 이름)이 누락되었거나, 위치가 잘못되었거나, 중복되었기 때문에 SQL Server가 Kerberos를 사용해서 인증할 수 없습니다.


SPN(서비스 사용자 이름)이 누락되었거나, 위치가 잘못되었거나, 중복되었기 때문에 SQL Server가 Kerberos를 사용해서 인증할 수 없습니다.
서비스 계정: {0}
누락된 SPN: {1}
위치가 잘못된 SPN: {2}
중복된 SPN: {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/Account$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MissingSpnList']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='MisplacedSpnList']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='DuplicateSpnList']$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Good" MonitorTypeStateID="Good" HealthState="Success"/>
<OperationalState ID="Bad" MonitorTypeStateID="Bad" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<ComputerNetworkName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerNetworkName>
<NetbiosComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</InstanceName>
<Account>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/Account$</Account>
<ServiceName>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>