이 모니터는 Microsoft® SQL Server™ 인스턴스 서비스 사용자 이름 구성의 상태를 확인합니다.
이 모니터는 Microsoft® SQL Server™ 인스턴스의 SPN(서비스 사용자 이름) 구성을 확인합니다. 이 작업은 SQL Server 서비스 및 도메인 컨트롤러 구성을 비교하여 수행됩니다.
SQL Server 데이터베이스 엔진의 SPN(서비스 사용자 이름)이 도메인의 Active Directory에서 누락되었거나, 위치가 잘못되었거나, 다른 SPN과 중복되었을 수 있습니다.
참고: 위치가 잘못된 SPN은 Active Directory의 잘못된 계정에 구성된 SPN입니다.
setspn.exe 및 klist.exe 프로그램을 사용하면 이 문제를 해결할 수 있습니다.
두 도구 모두 Windows Server 2008 이상에서 제공됩니다. 이전 버전의 Windows에서는 Microsoft Download Center에서 별도로 다운로드하거나 Windows 지원 도구 패키지에서 가져와야 할 수 있습니다.
사례 1: 누락된 SPN 해결 방법:
1. 다음 명령을 실행하여 누락된 SPN을 추가합니다.
setspn –S <SPN> <계정>
2. 클라이언트 응용 프로그램에서 SQL Server에 다시 연결해봅니다.
setspn 명령에 /S 또는 –A 매개 변수를 사용할 수도 있습니다. –A 매개 변수는 더 이상 사용되지 않는 것으로 Windows Server 버전(2012, 2012 R2)에서는 계속 사용할 수 있습니다.
가상 계정(예: 로컬 시스템 또는 NT 서비스\MSSQL Server)을 사용하는 경우 컴퓨터의 호스트 이름에 setspn 명령의 <Account> 값이 나타나야 합니다.
또는 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에 대한 연결 문제가 발생할 수 있습니다.
이름 | 설명 | 기본값 |
알림 우선 순위 | 알림 우선 순위를 정의합니다. | 보통 |
알림 심각도 | 알림 심각도를 정의합니다. | 경고 |
사용 | 워크플로를 사용하거나 사용하지 않도록 설정합니다. | 예 |
알림 생성 | 워크플로가 알림을 생성하는지를 정의합니다. | 예 |
간격(초) | 워크플로를 실행하는 반복 시간 간격(초)입니다. | 900 |
검색 범위 | 검색 범위가 도메인 또는 조직 구성 단위인 경우 LDAP 검색을 사용합니다. 검색 범위가 포리스트인 경우 글로벌 카탈로그(GC) 검색을 사용하여 임의의 파티션 내에서 쿼리를 해결할 수 있습니다. 값 목록: LDAP GC | LDAP |
동기화 시간 | 24시간 형식으로 지정된 동기화 시간입니다. 생략될 수 있습니다. |
|
제한 시간(초) | 워크플로가 닫히고 실패한 항목으로 표시될 때까지 실행이 허용되는 시간을 지정합니다. | 300 |
Target | Microsoft.SQLServer.2012.DBEngine | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | AvailabilityHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatus | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2012Core!Microsoft.SQLServer.2012.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.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>