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

비밀번호

댓글 작성자
 




1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13900정성태3/8/20252614스크립트: 72. 파이썬 - SQLAlchemy + oracledb 연동
13899정성태3/7/20252077스크립트: 71. 파이썬 - asyncio의 ContextVar 전달
13898정성태3/5/20252428오류 유형: 948. Visual Studio - Proxy Authentication Required: dotnetfeed.blob.core.windows.net
13897정성태3/5/20252834닷넷: 2326. C# - PowerShell과 연동하는 방법 (두 번째 이야기)파일 다운로드1
13896정성태3/5/20252747Windows: 279. Hyper-V Manager - VM 목록의 CPU Usage 항목이 항상 0%로 나오는 문제
13895정성태3/4/20252776Linux: 117. eBPF / bpf2go - Map에 추가된 요소의 개수를 확인하는 방법
13894정성태2/28/20252682Linux: 116. eBPF / bpf2go - BTF Style Maps 정의 구문과 데이터 정렬 문제
13893정성태2/27/20252522Linux: 115. eBPF (bpf2go) - ARRAY / HASH map 기본 사용법
13892정성태2/24/20253466닷넷: 2325. C# - PowerShell과 연동하는 방법파일 다운로드1
13891정성태2/23/20252806닷넷: 2324. C# - 프로세스의 성능 카운터용 인스턴스 이름을 구하는 방법파일 다운로드1
13890정성태2/21/20252598닷넷: 2323. C# - 프로세스 메모리 중 Private Working Set 크기를 구하는 방법(Win32 API)파일 다운로드1
13889정성태2/20/20253536닷넷: 2322. C# - 프로세스 메모리 중 Private Working Set 크기를 구하는 방법(성능 카운터, WMI) [1]파일 다운로드1
13888정성태2/17/20252760닷넷: 2321. Blazor에서 발생할 수 있는 async void 메서드의 부작용
13887정성태2/17/20253494닷넷: 2320. Blazor의 razor 페이지에서 code-behind 파일로 코드를 분리 및 DI 사용법
13886정성태2/15/20252896VS.NET IDE: 196. Visual Studio - Code-behind처럼 cs 파일을 그룹핑하는 방법
13885정성태2/14/20253578닷넷: 2319. ASP.NET Core Web API / Razor 페이지에서 발생할 수 있는 async void 메서드의 부작용
13884정성태2/13/20253875닷넷: 2318. C# - (async Task가 아닌) async void 사용 시의 부작용파일 다운로드1
13883정성태2/12/20253570닷넷: 2317. C# - Memory Mapped I/O를 이용한 PCI Configuration Space 정보 열람파일 다운로드1
13882정성태2/10/20252853스크립트: 70. 파이썬 - oracledb 패키지 연동 시 Thin / Thick 모드
13881정성태2/7/20253069닷넷: 2316. C# - Port I/O를 이용한 PCI Configuration Space 정보 열람파일 다운로드1
13880정성태2/5/20253470오류 유형: 947. sshd - Failed to start OpenSSH server daemon.
13879정성태2/5/20253641오류 유형: 946. Ubuntu - N: Updating from such a repository can't be done securely, and is therefore disabled by default.
13878정성태2/3/20253670오류 유형: 945. Windows - 최대 절전 모드 시 DRIVER_POWER_STATE_FAILURE 발생 (pacer.sys)
13877정성태1/25/20253578닷넷: 2315. C# - PCI 장치 열거 (레지스트리, SetupAPI)파일 다운로드1
13876정성태1/25/20254308닷넷: 2314. C# - ProcessStartInfo 타입의 Arguments와 ArgumentList파일 다운로드1
13875정성태1/24/20253416스크립트: 69. 파이썬 - multiprocessing 패키지의 spawn 모드로 동작하는 uvicorn의 workers
1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...