대상 주체 이름이 잘못되었습니다.SSPI 컨텍스트를 생성할 수 없습니다.
시스템 A에서 SQL Server를 실행하고 있는 시스템 B로의 SQL Server 접속에 어려움을 겪고 있습니다.
나는 구글을 많이 검색했지만, 내가 발견한 모든 것이 효과가 없었다.또한 이 문제를 해결하는 과정을 단계별로 안내하는 것도 아닙니다.
Kerberos가 아니라 NTLM을 사용하고 있습니다.
관련된 머신은 다음과 같습니다(xx는 보안을 위해 머신 이름의 일부를 숨기는 데 사용됩니다).
- xxPRODSVR001 - Windows Server 2012 도메인 컨트롤러
- xxDEVSVR003 - Windows Server 2012 (이 머신에서 오류가 발생하고 있습니다)
- xxDEVSVR002 - Windows Server 2012 (이 머신은 SQL Server 2012를 실행하고 있습니다)
다음 SPN이 DC(xxPRODSVR001)에 등록되어 있습니다.보안상의 이유로 도메인을 yyy로 숨겼습니다.
CN=xxDEVSVR002,CN=컴퓨터의 등록된 ServicePrincipalNames,DC=yyy, DC=로컬:
MSSQLSvc/xxDEVSVR002.yyy.local:49298 MSSQLSvc/xxDEVSVR002.yyy.local:TFS RestrictedKrbHost/xxDEVSVR002 RestrictedKrbHost/xxDEVSVR002.yyy.local Hyper-V Replica Service/xxDEVSVR002 Hyper-V Replica Service/xxDEVSVR002.yyy.local Microsoft Virtual System Migration Service/xxDEVSVR002 Microsoft Virtual System Migration Service/xxDEVSVR002.yyy.local Microsoft Virtual Console Service/xxDEVSVR002 Microsoft Virtual Console Service/xxDEVSVR002.yyy.local SMTPSVC/xxDEVSVR002 SMTPSVC/xxDEVSVR002.yyy.local WSMAN/xxDEVSVR002 WSMAN/xxDEVSVR002.yyy.local Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/xxDEVSVR002.yyy.local TERMSRV/xxDEVSVR002 TERMSRV/xxDEVSVR002.yyy.local HOST/xxDEVSVR002 HOST/xxDEVSVR002.yyy.localCN=xxDEVSVR003,CN=컴퓨터의 등록된 ServicePrincipalNames,DC=yyy, DC=로컬:
MSSQLSvc/xxDEVSVR003.yyy.local:1433 MSSQLSvc/xxDEVSVR003.yyy.local Hyper-V Replica Service/xxDEVSVR003 Hyper-V Replica Service/xxDEVSVR003.yyy.local Microsoft Virtual System Migration Service/xxDEVSVR003 Microsoft Virtual System Migration Service/xxDEVSVR003.yyy.local Microsoft Virtual Console Service/xxDEVSVR003 Microsoft Virtual Console Service/xxDEVSVR003.yyy.local WSMAN/xxDEVSVR003 WSMAN/xxDEVSVR003.yyy.local TERMSRV/xxDEVSVR003 TERMSRV/xxDEVSVR003.yyy.local RestrictedKrbHost/xxDEVSVR003 HOST/xxDEVSVR003 RestrictedKrbHost/xxDEVSVR003.yyy.local HOST/xxDEVSVR003.yyy.local
SQL Server 오류 메시지에 대해 좀 더 자세히 설명하고 연결하려는 사용자 이름을 알려주면 이 문제를 진단할 수 있습니다.
이 문제를 해결하는 방법을 가르쳐 주실 수 있나요?아니면 제가 제공한 내용에서 잘못된 점이 보이시나요?
더 많은 디버깅 정보를 생성할 수 있습니다.필요한 정보를 알려주세요.
ASP에서 이 문제가 발생했습니다.작업하던 NET MVC 앱입니다.
최근에 비밀번호를 변경한 것을 깨달았고 로그아웃했다가 다시 로그인함으로써 비밀번호를 수정할 수 있었습니다.
SSPI 컨텍스트에러는 Kerberos를 사용하여 인증이 시도되고 있음을 나타냅니다.
Kerberos 인증 SQL Server의 Windows 인증은 Active Directory에 의존하므로 컴퓨터와 네트워크 도메인 컨트롤러 간의 신뢰할 수 있는 관계가 필요하므로 먼저 해당 관계를 검증해야 합니다.
다음 Powershell 명령어 Test-ComputerSecureChannel을 사용하면 이러한 관계를 빠르게 확인할 수 있습니다.
Test-ComputerSecureChannel -Verbose
False가 반환되면 컴퓨터 Active Directory 보안 채널을 복구해야 합니다. Active Directory 보안 채널이 없으면 컴퓨터 외부에서 도메인 자격 증명을 확인할 수 없습니다.
다음 Powershell 명령을 사용하여 컴퓨터 보안 채널을 복구할 수 있습니다.
Test-ComputerSecureChannel -Repair -Verbose
경우(에 도메인가 동작하지 않기 에), 를 사용할 수 .NETDOM RESET 높은 곳에서cmd.exePowerShell이) (PowerShell) :
NETDOM RESET %COMPUTERNAME% /UserO:domainAdminUserName /Password0:* /SecurePasswordPrompt
( (', '')가 O(대문자-"Oh", 0이 아님)0/Password0:* /SecurePasswordPrompt옵션에서는 패스워드를 명령줄에 직접 입력하지 않고 credential 팝업이 사용됩니다.을 이용하다
보안 이벤트 로그를 확인합니다.Kerberos 를 사용하고 있는 경우는, 인증 패키지에 의한 로그 온 시행이 표시됩니다.케베로스
NTLM 인증에 실패했을 가능성이 있기 때문에 kerberos 인증이 시행되고 있습니다.보안 이벤트 로그에 NTLM 로그온 시도 실패가 표시될 수도 있습니다.
dev에서 kerberos 이벤트로깅을 켜면 매우 상세하지만 kerberos에서 장애가 발생한 원인을 디버깅할 수 있습니다.
Microsoft의 Kerberos Configuration Manager for SQL Server를 사용하면 이 문제를 신속하게 진단하고 해결할 수 있습니다.
여기 좋은 이야기가 있습니다.http://houseofbrick.com/microsoft-made-an-easy-button-for-spn-and-double-hop-issues/
윈도 인증을 시도했을 때 같은 오류가 발생하였습니다.터무니없게 들리지만 혹시 다른 사람에게 도움이 될까 봐. 로그인 중에 도메인 계정이 잠겼기 때문입니다(!).계정의 잠금을 해제하면 수정되었습니다.
Integrated Security=true이 파라미터를 접속 문자열에서 삭제합니다.
중요: 사용자 @Auspex가 코멘트했듯,
통합 보안을 삭제하면 Windows 자격 증명을 사용하여 로그인하려고 할 때 오류가 발생하므로 이 오류를 방지할 수 있습니다.안타깝게도 대부분의 경우 Windows 자격 증명으로 로그인해야 합니다.
비밀번호가 아닌 PIN으로 Windows 10에 로그인하고 있었습니다.로그아웃 후 패스워드로 다시 로그인하여 Management Studio를 통해 SQL Server에 접속할 수 있었습니다.
The target principal name is incorrect. Cannot generate SSPI context. (.Net SqlClient Data Provider):
SQL Server에 ping을 실행할 때 해결되는 IP가 Configuration Manager의 IP와 동일한지 확인합니다.확인하려면 SQL Server Configuration Manager를 열고 [SQL Server Network Configuration]> [ Protocols for MSSQLServer ]> [ TCP / IP ]으로 이동합니다.
TCP/IP 가 유효하게 되어 있는 것을 확인하고, [IP 주소(IP Addresses)]탭에서, ping시에 서버가 해결한 IP 가 여기서 같은 IP 인 것을 확인합니다.그것은 나에게 이 오류를 수정해 주었다.
나는 이것을 우연히 발견했고, 두 가지 일을 해서 그것을 고쳤다.
- ADSI Edit를 사용하여 서비스 계정에 읽기/쓰기 서비스 PrincipalName 권한을 부여합니다(https://support.microsoft.com/en-us/kb/811889 참조).
(서비스 계정이 아닌) SQL Server 시스템 계정에 이전에 존재했던 SPN 제거
setspn -D MSSQLSvc/HOSTNAME.domain.name.com:1234 HOSTNAME여기서 1234는 인스턴스에서 사용되는 포트 번호입니다(내 번호는 기본 인스턴스가 아닙니다).
이는 보통 Service Principle Name(SPN; 서비스 원칙 이름)이 없거나 잘못되었거나 중복되었기 때문입니다.
해결 절차:
- SQL Server에서 사용 중인 AD 계정을 확인합니다.
- 다음 명령을 Powershell 또는 관리자 모드에서 실행합니다(서비스 계정에 도메인이 포함되어 있지 않아야 함).
setspn -L <ServiceAccountName> | Select-String <ServerName> | select line
반환되는 출력에 포트와 포트가 없는 완전 수식(완전 수식 없음) SPN은 완전 수식되지 않았습니다.
예상 출력:
Registered ServicePrincipalNames for CN=<ServiceAccountName>,OU=CSN Service Accounts,DC=<Domain>,DC=com: MSSQLSvc/<ServerName>.<domain>.com:1433 MSSQLSvc/<ServerName>:1433 MSSQLSvc/<ServerName>.<domain>.com MSSQLSvc/<ServerName>위의 내용이 모두 표시되지 않으면 PowerShell에서 다음 명령을 실행하거나 관리 모드에서 CMD를 실행합니다(기본값 1433을 사용하지 않는 경우 포트를 변경하십시오).
SETSPN -S MSSQLSvc/<ServerName> <Domain>\<ServiceAccountName> SETSPN -S MSSQLSvc/<ServerName>.<Domain> <Domain>\<ServiceAccountName> SETSPN -S MSSQLSvc/<ServerName>:1433 <Domain>\<ServiceAccountName> SETSPN -S MSSQLSvc/<ServerName>.<Domain>:1433 <Domain>\<ServiceAccountName>
- 위의 작업이 완료되면 일반적으로 DNS 전파에 몇 분 정도 걸립니다.
또한 중복된 SPN에 대한 메시지가 나타나면 SPN을 삭제하고 다시 생성할 수 있습니다.
이 문제는 Windows 자격 증명 문제인 것 같다.VPN을 탑재한 업무용 노트북에서도 같은 에러가 발생하고 있었습니다.도메인/사용자명으로 로그인되어 있을 것으로 생각됩니다.이것은 직접 접속할 때 정상적으로 사용하는 것입니다만, 다른 접속을 가지는 VPN으로 이행하면 바로 이 에러가 발생합니다.서버에 ping을 할 수 있었기 때문에 DNS 문제라고 생각했습니다만, 커맨드 프롬프트에서 사용자로서 명시적으로 SMSS를 실행할 필요가 있었습니다.
예: runas /net only /user:고객님의 도메인\사용자명 "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common 7\IDE\Ssms.exe"
SQL Box와 클라이언트에 모두 로그인하고 다음을 입력합니다.
ipconfig /flushdns
nbtstat -R
이 방법으로 동작하지 않는 경우는, 클라이언트 머신으로 DHCP 를 갱신해 주세요.이것은, 우리 사무실의 2대의 PC에 대응합니다.
클라이언트와 서버간의 클럭의 일치를 확인합니다.
이 에러가 간헐적으로 발생했을 때, 상기의 회답은 모두 동작하지 않습니다.그 후, 일부의 서버에서는 시간이 흐른 것을 알 수 있었습니다.이것들이 다시 동기화되면, 에러는 해소됩니다.w32tm 또는 NTP 를 검색해, Windows 로 시각을 자동적으로 동기 하는 방법을 확인합니다.
제 경우 (개발 서버에서) SQL Server 2014를 재시작하면 문제가 해결되었습니다.
저는 웹 어플리케이션에 접속할 때 이 문제가 있었습니다.최근 Windows 비밀번호를 변경한 것이 원인일 수 있습니다.
이 문제는 웹 애플리케이션을 호스팅한 앱 풀의 암호를 업데이트하면 해결되었습니다.
격리된 네트워크의 PC 클러스터에서 IPv6를 테스트하고 있었는데 IPv4로 되돌렸을 때 이 문제가 발생했습니다.Active Directory, DNS 및 DHCP에서 플레이하고 있기 때문에 Kerberos 설정을 해제하기 위해 무엇을 실행했는지 알 수 없습니다.
리모트 접속에 도움이 되는 힌트로 소프트웨어 이외의 접속을 재테스트했습니다.
https://blogs.msdn.microsoft.com/steverac/2010/12/13/test-remote-sql-connectivity-easily/
그리고 간단한 검색 후 마이크로소프트 웹사이트 https://support.microsoft.com/en-gb/help/811889/how-to-troubleshoot-the-cannot-generate-sspi-context-error-message에서 이것을 발견했습니다.
SQL Server에서 도구를 실행하여 상태가 error로 표시되는 경우 문제가 없는지 확인한 후 표시되는 수정 버튼을 누릅니다.
이것으로 나는 그 문제를 해결했다.
제 상황에서는 통합 보안을 사용하여 PC에서 도메인 없이 네트워크상의 다른 PC의 SQL Server에 접속하려고 했습니다.양쪽 PC에서 같은 Microsoft 계정으로 Windows에 로그인하고 있었습니다.PC와 SQL Server 모두에서 로컬 계정으로 전환하여 정상적으로 연결되었습니다.
저도 같은 문제가 있었습니다만, 기계 잠금과 잠금 해제가 효과가 있었습니다.방화벽 문제로 인해 오류가 발생할 수 있습니다.
제 경험을 말씀드리면 잘 될지는 모르겠지만요.
이 Microsoft Tool은 Magic과 같습니다.실행 후 SQL 서버에 연결하고 수정을 클릭합니다.
여기에 링크된 이전 버전은 SQL Server 2017에서 작동합니다.
SQL Server용 Kerberos 설정 매니저 https://www.microsoft.com/en-us/download/details.aspx?id=39046
혹시 궁금하실까 봐 MS 용어를 풀어봤습니다.
Target = (active directory) target
Active directory target = target server running the domain controller
Domain controller = server that verifies your login information
Principal name = your windows username
SSPI = security support provider interface
Security support provider interface = software interface that manages "authenticated
communications" and allows SSPs like TLS to allow SSL, among others
SSP = security support provider (SSPI implementation)
TLS/SSL = you should already know this
= 암호를 확인할 수 없습니다.
제 자신의 문제에 대한 해결책을 찾기 위해 이곳에 왔기 때문에, 다른 사람들도 여기에 올 경우를 대비해서 제 해결책을 여기서 공유하겠습니다.
컴퓨터가 다른 도메인의 다른 사무실로 옮겨질 때까지 SQL Server에 정상적으로 연결되었습니다.그리고 전환 후 타깃 사용자 이름에 대한 오류가 발생하였습니다.server.domain.com 등의 완전 수식 이름을 사용하여 접속한 수정 내용.실제로 첫 번째 서버에 접속하면 서버 이름만으로 다른 서버에 접속할 수 있습니다(완전한 자격은 취득하지 않아도 됩니다). 단, 마일리지가 다를 수 있습니다.
개발 환경에서 작업하고 있을 때부터 누군가가 도메인 컨트롤러를 셧다운하여 Windows Credential을 인증할 수 없었습니다.도메인 컨트롤러의 전원을 켜면 에러가 없어지고, 모든 것이 정상적으로 동작했다.
오늘 우연히 이 문제를 발견했는데, 수정 사항을 공유하고자 합니다. 이 문제는 간과되고 수정하기 쉽기 때문입니다.
당사는 자체 rDNS를 관리하고 최근 서버 명명 방식을 수정했습니다.그 일환으로 우리는 rDNS를 업데이트하고 이것을 잊어버렸어야 했다.
ping에 의해 올바른 호스트 이름이 생성되었지만 ping -a에 의해 잘못된 호스트 이름이 반환되었습니다.
간단한 수정: rDNS 변경, ipconfig /flushdns 실행, 30초 대기(단순히 실행), 다른 ping -a 실행, 올바른 호스트 이름 해결 확인, connect ... 이익.
이 문제의 특징은 다음과 같습니다.
- 사용자는 이름 있는 인스턴스에 정상적으로 접속할 수 있었습니다.예를 들어,
Server\Instance - 사용자가 기본 인스턴스(예: 연결)에 연결할 수 없습니다.
ServerSSPI에 했습니다. - 할 수 를 들어, 「」에 할 수 없었습니다.
Server.domain.comfailed(실패) - 가 이름 있는 없이 수를 들어, IP 주소의 은 IP 주소입니다.
192.168.1.134 - 도메인에 없지만(예를 들어 네트워크에 VPN을 사용하는 사용자) 도메인 자격 증명을 사용하는 다른 사용자는 기본 인스턴스와 IP 주소에 성공적으로 연결할 수 있었습니다.
이 싱글 유저가 접속할 수 없는 원인을 파악하기 위해서, 많은 고민을 한 후에, 이 상황을 해결하기 위해서 우리가 취한 순서는 다음과 같습니다.
- SPN을 이용하다
setspn -l Server
이 a라고 . 리의,,, 음음음음음음음음음음음음음음음Server.domain.com - 에 엔트리를 합니다.
C:\Windows\System32\drivers\etc\hosts(관리자)한 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★.
Server.domain.com Server
그 후 SSMS 경유로 디폴트인스턴스에 정상적으로 접속할 수 있었습니다.
서버 2012에서 호스팅되는 SQL 2012의 새로운 기능을 발견했습니다.SQL AlwaysOn sql sql sql sql 。
이치노SSPI를 사용하다
문제를 해결하려면 다음 명령을 실행합니다.
setspn -D MSSQLSvc/SERVER_FQNName:1433 DomainNamerunningSQLService
DomainNamerunningSQLService== SQL에 대해 설정한 도메인 계정 명령을 실행하려면 도메인 관리자가 필요했습니다.클러스터에서 문제가 발생한 서버는 1개뿐입니다.
그런 다음 SQL을 재시작했습니다.놀랍게도 나는 연락을 취할 수 있었다.
Visual Studio 2015 Console App은 SQL Server 2015의 VM입니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★아침에 앱을 디버깅하려고 하면 이 오류가 발생합니다.는 는 i i는노노 i i i i i.ipconfig/flush ★★★★★★★★★★★★★★★★★」release+renew그리고 다른 쓰레기 더미들도 있지만 결국엔...
VM을 다시 시작하고 클라이언트를 다시 시작합니다.그걸로 해결됐어요.알았어야 했는데, 매번 재시작이 되더라고요.
SQL 서버에서 이 문제가 발생했습니다.setspn - D mssqlsvc\Hostname.domainname Hostname을 설정한 후 SQL Server 서비스를 중지하고 시작합니다.
SQL 서비스를 중지하고 시작하는 것만으로 충분하다고 생각합니다.
여기 있는 모든 해결책을 시도해 봤지만 아직 효과가 있는 것은 하나도 없어요.이 문제를 해결하려면 연결을 클릭하고 서버 이름을 입력한 다음 옵션, 연결 속성 탭을 선택합니다."네트워크 프로토콜"을 "지정된 파이프"로 설정합니다.이것에 의해, 유저는 네트워크 credential을 사용해 리모트 접속할 수 있습니다.수정이 되면 업데이트 올리겠습니다.
제 경우는 와이파이에 DNS를 설정하는 것이 문제였습니다.저는 설정을 삭제하고 비워두고 작업을 했습니다.
"SQL Server 구성 관리자"에서 "지정된 파이프"가 사용되도록 설정되었는지 확인하십시오.이건 나한테 효과가 있었어.
- "SQL Server 구성 관리자"를 엽니다.
- 왼쪽 목록에서 "SQL Server 네트워크 구성"을 확장합니다.
- "[사용자 인스턴스 이름] 프로토콜"을 선택합니다.
- 오른쪽 목록에서 "지정된 파이프"를 마우스 오른쪽 버튼으로 클릭합니다.
- "유효"를 선택합니다.
- 인스턴스 서비스를 재시작합니다.
네트워크 접속으로 인해 발생하는 이 문제의 다른 틈새입니다.Windows VPN 클라이언트를 사용하여 접속하고 있는데 WiFi에서 유선 연결로 전환했을 때 이 문제가 발생하였습니다.제 상황에 대한 해결책은 어댑터 메트릭을 수동으로 조정하는 것이었습니다.
powershell에서는 Get-NetIPInterface를 사용하여 모든 메트릭 값을 표시합니다.숫자가 작을수록 비용이 낮기 때문에 창문이 선호합니다.이더넷과 VPN을 전환하면 SSMS가 만족하기 위해 필요한 credential을 얻을 수 있습니다.
자동 메트릭 기능을 설정하려면 , 다음의 순서에 따릅니다.제어판에서 네트워크 연결을 두 번 클릭합니다.네트워크 인터페이스를 마우스 오른쪽 버튼으로 누른 다음 속성을 선택하십시오.[인터넷 프로토콜(TCP/IP)]을 누른 후 [정보]를 선택합니다.일반 탭에서 고급을 선택합니다.메트릭을 지정하려면 [IP 설정(IP Settings)]탭에서 [자동 메트릭(Automatic metric)]체크박스를 끄고 [인터페이스 메트릭(Interface Metric)]필드에 원하는 메트릭을 입력합니다.
출처 : https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/automatic-metric-for-ipv4-routes
저는 이 문제를 만족스럽게 해결할 수 없었습니다.클라이언트에서 로컬 Windows 계정으로 로그인하면 Windows 인증은 문제 없이 작동합니다.다만, Microsoft 어카운트에서 로그인하려고 하면(동기 기능이 있기 때문에 권장) 「잘못된 주체」라고 하는 메세지가 표시됩니다.MS-SQL 로그에는 로그인 실패 기록이 표시되지 않습니다.이것은 실패가 매우 일찍 발생했음을 의미합니다.
언급URL : https://stackoverflow.com/questions/32309922/the-target-principal-name-is-incorrect-cannot-generate-sspi-context
'programing' 카테고리의 다른 글
| python에서 list.index(존재하지 않을 수 있음)를 처리하는 가장 좋은 방법? (0) | 2023.04.10 |
|---|---|
| 'tail' 명령어와 동등한 명령어 (0) | 2023.04.10 |
| 다른 포크의 병합되지 않은 업스트림 풀 요청을 포크에 적용하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| SQL Server의 에일리어스 컬럼에서 GROUP BY를 실행하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| WPF TextBlock과 TextBox 사이에 차이가 있습니까? (0) | 2023.04.10 |


