도메인의 다른 컴퓨터에서 SQL Server 데이터베이스에 대한 연결을 여는 작은 ASP.NET 테스트 스크립트가 있습니다. 모든 경우에 작동하지는 않습니다.
설정:
W2K8R2의 IIS 7.5는 원격 SQL Server 2008 R2 인스턴스에 연결하려고합니다. 모든 컴퓨터가 같은 도메인에 있습니다.
웹 사이트에 ApplicationPoolIdentity를 사용하면 다음과 같이 SQL Server에 연결하지 못합니다.
사용자 ‘NT AUTHORITY \ ANONYMOUS LOGON’에 대한 로그인에 실패했습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 발생한 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.
예외 정보 : System.Data.SqlClient.SqlException : ‘NT AUTHORITY \ ANONYMOUS LOGON’사용자에 대한 로그인이 실패했습니다.
그러나 프로세스 모델 ID를 NETWORK SERVICE 또는 내 도메인 계정으로 전환하면 데이터베이스 연결에 성공한 것입니다.
SQL Server에서 \ $ 액세스 권한을 부여했습니다.
웹 사이트에서 인증을 수행하지 않고 데이터베이스에 연결하여 작동하는지 확인하는 간단한 스크립트 일뿐입니다.
익명 인증을 사용하고 응용 프로그램 풀 ID를 사용하도록 설정했습니다.
이 작업을 어떻게합니까? ApplicationPoolIdentity가 ANONYMOUS LOGON을 사용하려고하는 이유는 무엇입니까? 또한 익명 로그온 사용을 중지하려면 어떻게해야합니까?
답변
나도 같은 문제가있었습니다. 에 따라 이 페이지 의 ApplicationPoolIdentity은 시스템 계정 (DOMAIN \ COMPUTERNAME $)와 같은 네트워크 리소스에 액세스하도록되어 있지만, 대신 액세스 SQL 서버에 NT AUTHORITY \ ANONYMOUS LOGON을 사용했다.
문서에서 말한대로 ApplicationPoolIdentity가 작동 하도록 이 핫픽스 를 사용할 수있었습니다 . 이 핫픽스는 NT AUTHORITY \ ANONYMOUS LOGON으로 네트워크 리소스에 액세스하기위한 솔루션을 구체적으로 설명하지는 않지만 컴퓨터 암호 변경과 관련이 있습니다.
이 stackoverflow 스레드 는이 솔루션을 찾는 데 도움이되었습니다.
ASP.NET ID 및 SQL ID 디버깅에 유용한 기타 팁
SQL 통합 인증은 스레드 ID와 관련이 있으므로 사용자 ID, 스레드 ID (가장에 따라 변경됨) 및 SQL 서버 로그인을 볼 수 있으면 유용합니다. 이 ASPX 스 니펫은 다음 세 가지를 모두 표시합니다.
<%@ Import Namespace="System.Security.Principal" %>
<div>ASP.NET Request User identity: <%= User.Identity.Name %></div>
<div>Current thread/process WindowsIdentity: <%= WindowsIdentity.GetCurrent(false).Name %></div>
<asp:SqlDataSource ID="CurrentUserData" runat="server" ConnectionString="<%$ ConnectionStrings:ConnID %>"
SelectCommand="select SYSTEM_USER" />
<asp:DetailsView DataSourceID="CurrentUserData" runat="server" />
답변
나는 똑같은 문제가 있었다. 나는 몇 시간 동안 머리카락을 뽑고 마침내 기계를 재부팅했습니다. 문제가 사라졌습니다! iisreset DID를 통해 IIS를 다시 시작해도 문제가 해결되지 않습니다. 서버를 다시 시작했을 때만 사라졌습니다.