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)
2870정성태2/24/201528218개발 환경 구성: 257. 윈도우 8.1에서 방화벽과 함께 FTP 서버 여는 방법
2869정성태2/23/201521862.NET Framework: 500. struct로 정의한 값 형식(Value Type)의 경우 Equals 재정의를 권장합니다.파일 다운로드1
2868정성태2/23/201526621VS.NET IDE: 97. Visual C++ 프로젝트 디버깅 시에 Step-Into(F11) 동작이 원치 않는 함수로 진입하는 것을 막는 방법 [2]
2867정성태2/23/201520301오류 유형: 273. File History - Failed to initiate user data backup (error 80070005)
2866정성태2/23/201522184오류 유형: 272. WAT080 : Failed to locate the Windows Azure SDK. Please make sure the Windows Azure SDK v2.1 is installed.
1868정성태2/20/201519032오류 유형: 271. The type '...' cannot be used as type parameter 'TContext' in the generic type or method 'System.ServiceModel.DomainServices.EntityFramework.LinqToEntitiesDomainService<T>
1866정성태2/20/201520255오류 유형: 270. "aspnet_regiis -i" 실행 시 0x00000006 오류 해결 방법
1865정성태2/20/201521670.NET Framework: 499. 특정 닷넷 프레임워크 버전 이후부터 제공되는 타입을 사용해야 한다면?
1864정성태2/18/201526533.NET Framework: 498. C#으로 간단하게 만들어 본 ASCII Art 프로그램 [2]파일 다운로드1
1862정성태2/18/201530687.NET Framework: 497. .NET Garbage Collection에 대한 정리 [6]
1861정성태2/18/201525715.NET Framework: 496. 마우스 커서가 놓인 지점의 문자열 얻는 방법 [1]파일 다운로드1
1860정성태2/18/201525740.NET Framework: 495. CorElementType의 요소 값 설명파일 다운로드1
1859정성태2/17/201526177Windows: 106. 컴퓨터를 재부팅하면 절전(Power Saver) 전원 모드로 돌아가는 경우
1858정성태2/16/201536116Windows: 105. 자동으로 로그아웃/잠김 화면 상태로 전환된다면? [2]
1857정성태2/16/201524153.NET Framework: 494. 값(struct) 형식의 제네릭(Generic) 타입이 박싱되는 경우의 메타데이터 토큰 값파일 다운로드1
1856정성태2/15/201522898.NET Framework: 493. TypeRef 메타테이블에 등록되는 타입의 조건파일 다운로드1
1855정성태2/10/201522261개발 환경 구성: 256. WebDAV Redirector - Sysinternals 폴더 연결 시 "The network path was not found" 오류 해결 방법
1854정성태2/10/201523211Windows: 104. 폴더는 삭제할 수 없지만, 그 하위 폴더/파일은 생성/삭제/변경하는 보안 설정
1853정성태2/6/201553767웹: 29. 여신금융협회 웹 사이트의 "Netscape 6.0은 지원하지 않습니다." 오류 메시지 [5]
1852정성태2/5/201524428.NET Framework: 492. .NET CLR Memory 성능 카운터의 의미파일 다운로드1
1851정성태2/5/201525001VC++: 88. 하룻밤의 꿈 - 인텔 하스웰의 TSX Instruction 지원 [2]
1850정성태2/4/201546006Windows: 103. 작업 관리자에서의 "Commit size"가 가리키는 메모리의 의미 [4]
1849정성태2/4/201525352기타: 51. DropBox의 CPU 100% 현상 [1]파일 다운로드1
1848정성태2/4/201521133.NET Framework: 491. 닷넷 Generic 타입의 메타 데이터 토큰 값 알아내는 방법 [2]
1847정성태2/3/201524528기타: 50. C# - 윈도우에서 dropbox 동기화 폴더 경로 및 종료하는 방법
1846정성태2/2/201533563Windows: 102. 제어판의 프로그램 추가/삭제 항목을 수동으로 실행하고 싶다면? [1]
... 121  122  123  124  125  126  127  128  [129]  130  131  132  133  134  135  ...