Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 


The SQL Server Network Interface library could not register the Service Principal Name (SPN) for the SQL Server service.


Oxite 설치로 인해 많은 일이 벌어지는군요. ^^ 그와 관련해서 SQL Express 버전의 User Instance 옵션도 알아봤지요.

SQL Express 버전과 User Instance 옵션 
; https://www.sysnet.pe.kr/2/0/668

그런데, UAC하의 계정에서 Oxite를 실행했더니 다음과 같은 오류가 발생했습니다.

A connection was successfully established with the server, but then an error occurred during the login process. (provider: Named Pipes Provider, error: 0 - No process is on the other end of the pipe.)



재미있는 것은, 조금의 시간이 흐른 후에 다시 해보면 정상적으로 Oxite 실행 화면이 나온다는 점입니다. 조금 더 살펴보니, SQL 서비스를 재시작하는 것에 문제가 있음을 알게 되었습니다. SQL 서비스가 "중지"는 빠르게 되는데, "시작"을 하면 한참 동안 진행 상태 대화창이 보이다가 결국에 다음과 같은 메시지를 내뱉으면서 서비스는 기어이 시작은 되어 있습니다.

[그림 1: SQL Express 2008 서비스 시작 오류]
sql_kerberos_failure_1.png

이 시점에 이벤트 로그를 살펴보면 다음과 같은 로그를 발견할 수 있습니다.

Log Name:      Application
Source:        MSSQL$SQLEXPRESS2008
Date:          2009-02-21 오전 11:58:14
Event ID:      26037
Task Category: Server
Level:         Information
Keywords:      Classic
User:          N/A
Computer:      THEMYTH.mydomain.com
Description:
The SQL Server Network Interface library could not register the Service Principal Name (SPN) for the SQL Server service. Error: 0x54b, state: 3. 
Failure to register an SPN may cause integrated authentication to fall back to NTLM instead of Kerberos. 
This is an informational message. 
Further action is only required if Kerberos authentication is required by authentication policies.

음... 이제야 이해가 갑니다. AD에 참여된 노트북이기 때문에 회사에서는 정상적으로 AD에 접속이 되어 Kerberos 보안이 적용된 SPN 등록이 이뤄지지만, 집에 와서 하니 AD 접속에 실패해서 대신 NTLM 보안 방식을 사용하겠다는 것입니다. Oxite 실행에서 처음에는 오류가 발생했다가, 시간이 흐른 뒤에 (즉, NTLM 보안으로 이행한 다음) 접속을 하면 정상적으로 실행되는 점도 같이 설명이 되어졌습니다.

그렇다면, SPN을 등록하지 않도록 하는 방법이 없을까요? 어차피 개인 PC에서 실행되는 SQL Express 버전이 크게 보안이 필요한 부분은 아니기 때문에 AD 접속으로 인한 지연 시간 때문에 웹 사이트 동작을 얼마간 기다려야 한다는 것은 별로 유쾌한 일은 아니니까요.

그러다 찾게 된 것이 아래의 토픽입니다.

SQL Server에서 Kerberos 인증을 사용하는 방법
; http://support.microsoft.com/kb/319723

위의 글을 읽다보면, 얻게 되는 단서가 2개 있는데 "Local SYSTEM" 계정은 SPN을 자동으로 구성한다는 점"과 클라이언트 측에서 "TCP/IP 프로토콜"을 사용하여 SQL 서버에 연결하는 경우에만 Kerberos 보안이 사용되어진다는 점입니다.

그렇다면, "Sql Server Configuration Manager"를 사용하여 TCP/IP 프로토콜을 끄면 혹시 자동적으로 Kerberos 지원을 포기하지 않을까 싶어서 봤는데... 흠... 이미 ^^; TCP/IP 프로콜은 꺼져있는 상태입니다. 이제 남은 희망이라면 "Local SYSTEM"을 다른 걸로 바꿔야 한다는 것인데, SQL Server 2005에서 기본적으로 "Network Service" 계정이었던 점을 감안하여 그걸로 한번 바꿔봤습니다. 쩝... 안되네요. 연이어 로컬 계정으로 지정해 보기도 하고, 설치 단계에서부터 SPN을 사용하겠다는 식으로 등록이 되어 그런 것이 아닐까 싶어서 SQL Express를 설치제거하고 다시 설치해보아도 역시나 안되었습니다.

어쩔 수 없군요. 이젠 다음의 3가지 중에 하나를 선택하는 수 밖에는 없을 것 같습니다.

  • 도메인을 탈퇴하거나,
  • SQL Express에 MDF 파일을 등록해서 쓰거나,
  • User Instance를 쓰지 말고 UAC 계정에서 관리자 계정으로 VS.NET을 실행한다.

(참고로, SQL Express 재설치 후에 User Instance 연결이 아예 안되는 경우 master DB가 캐쉬되어 있는 폴더를 삭제하시면 됩니다.)



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/10/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 121  122  123  124  125  126  127  128  129  130  [131]  132  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
1782정성태10/21/201420402오류 유형: 250. 이벤트 로그 - Application Server job failed for service instance Microsoft.Office.Server.Search.Administration.SearchServiceInstance
1781정성태10/21/201420885디버깅 기술: 64. new/delete의 짝이 맞는 경우에도 메모리 누수가 발생한다면?
1780정성태10/15/201424435오류 유형: 249. The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID
1779정성태10/15/201419943오류 유형: 248. Active Directory에서 OU가 지워지지 않는 경우
1778정성태10/10/201418464오류 유형: 247. The Netlogon service could not create server share C:\Windows\SYSVOL\sysvol\[도메인명]\SCRIPTS.
1777정성태10/10/201421537오류 유형: 246. The processing of Group Policy failed. Windows attempted to read the file \\[도메인]\sysvol\[도메인]\Policies\{...GUID...}\gpt.ini
1776정성태10/10/201418557오류 유형: 245. 이벤트 로그 - Name resolution for the name _ldap._tcp.dc._msdcs.[도메인명]. timed out after none of the configured DNS servers responded.
1775정성태10/9/201419650오류 유형: 244. Visual Studio 디버깅 (2) - Unable to break execution. This process is not currently executing the type of code that you selected to debug.
1774정성태10/9/201426792개발 환경 구성: 246. IIS 작업자 프로세스의 20분 자동 재생(Recycle)을 끄는 방법
1773정성태10/8/201429957.NET Framework: 471. 웹 브라우저로 다운로드가 되는 파일을 왜 C# 코드로 하면 안되는 걸까요? [1]
1772정성태10/3/201418773.NET Framework: 470. C# 3.0의 기본 인자(default parameter)가 .NET 1.1/2.0에서도 실행될까? [3]
1771정성태10/2/201428199개발 환경 구성: 245. 실행된 프로세스(EXE)의 명령행 인자를 확인하고 싶다면 - Sysmon [4]
1770정성태10/2/201421885개발 환경 구성: 244. 매크로 정의를 이용해 파일 하나로 C++과 C#에서 공유하는 방법 [1]파일 다운로드1
1769정성태10/1/201424313개발 환경 구성: 243. Scala 개발 환경 구성(JVM, 닷넷) [1]
1768정성태10/1/201419620개발 환경 구성: 242. 배치 파일에서 Thread.Sleep 효과를 주는 방법 [5]
1767정성태10/1/201424836VS.NET IDE: 94. Visual Studio 2012/2013에서의 매크로 구현 - Visual Commander [2]
1766정성태10/1/201422714개발 환경 구성: 241. 책 "프로그래밍 클로저: Lisp"을 읽고 나서. [1]
1765정성태9/30/201426284.NET Framework: 469. Unity3d에서 transform을 변수에 할당해 사용하는 특별한 이유가 있을까요?
1764정성태9/30/201422478오류 유형: 243. 파일 삭제가 안 되는 경우 - The action can't be comleted because the file is open in System
1763정성태9/30/201424029.NET Framework: 468. PDB 파일을 연동해 소스 코드 라인 정보를 알아내는 방법파일 다운로드1
1762정성태9/30/201424823.NET Framework: 467. 닷넷에서 EIP/RIP 레지스터 값을 구하는 방법 [1]파일 다운로드1
1761정성태9/29/201421883.NET Framework: 466. 윈도우 운영체제의 보안 그룹 이름 및 설명 문자열을 바꾸는 방법파일 다운로드1
1760정성태9/28/201420049.NET Framework: 465. ICorProfilerInfo::GetILToNativeMapping 메서드가 0x80131358을 반환하는 경우
1759정성태9/27/201431233개발 환경 구성: 240. Visual C++ / x64 환경에서 inline-assembly를 매크로 어셈블리로 대체하는 방법파일 다운로드1
1758정성태9/23/201438005개발 환경 구성: 239. 원격 데스크톱 접속(RDP)을 기존의 콘솔 모드처럼 사용하는 방법 [1]
1757정성태9/23/201418610오류 유형: 242. Lync로 모임 참여 시 소리만 들리지 않는 경우 - 두 번째 이야기
... 121  122  123  124  125  126  127  128  129  130  [131]  132  133  134  135  ...