2014-02-17 1 views
0

기존 MVC 웹 사이트를 변경하라는 요청을 받았습니다. 불행히도이 사이트의 원래 개발자는 더 이상 회사에 없으므로 문서가 없으며 아무도 실제로 알지 못합니다. 그것 이외의 현재 우리의 테스트 & 라이브 환경에서 실행됩니다. 신음로컬로 MVC 웹 응용 프로그램을 실행할 수 없습니다.

어쨌든 나는 시작 프로젝트로 프로젝트를 설정하고 나는 다음과 같은 아름다운 흰색 오류 페이지 얻을 실행하면

Access is denied.

Description: An error occurred while accessing the resources required to serve this request. The server may not be configured for access to the requested URL.

Error message 401.2.: Unauthorized: Logon failed due to server configuration. Verify that you have permission to view this directory or page based on the credentials you supplied and the authentication methods enabled on the Web server. Contact the Web server's administrator for additional assistance.

을 아니를 나를위한 거대한 양 (적어도 나를 위해). 그래서 나는 web.config 파일에서 확인하고 authorization은 다음과 같이 설정됩니다

<authorization> 
    <deny users=”?” /> 
</authorization> 

나는 그것을로드 할 수 없습니다라는 페이지를 얻을 아래 나는 코드로 변경,하지만 한 단계 더있는 경우 최소한 코드에 조금이라도 들어가기 만하면됩니다.

<authorization> 
     <allow users="*"/> 
    </authorization> 

코드는 작동 Active Directory에 대한 몇 가지 검증을 수행하지, 난 브레이크 포인트를 설정하고 기능을지나 이동하여 그 성가신 보안 코드 주위에 얻을 수 있습니다. 코드 자체는 아무 것도하지 않지만 사용자가 유효하면이 코드를 true으로 돌려 주거나 유효하지 않은 경우 false을 반환합니다. 이것은 컨트롤러 내에서 아무 일도 일어나지 않는 것을 알기 위해 중단 점을 잡을 수있는 유일한 방법이지만 아무것도 튀어 나오지 않습니다. 코드는 부분적으로 올바른 정보를 얻기 위해 LINQ을 사용할 클래스에 있습니다. results 가져올 때 그것이 EntityException을 던질 것이다 위의 코드에서

public ReadOnlyCollection<Application> GetApplicationStatus() 
{ 
    using (ApplicationDBEntities context = new ApplicationDBEntities()) 
    { 

      var results = (from parameters in context.Parameters 
       join application in context.ApplicationIds on parameters.ApplicationId equals application.ApplicationId1 
       where parameters.ParameterName.Equals("DateTime", StringComparison.OrdinalIgnoreCase) && 
       !parameters.Application.Equals(0) 
      select new Application 
      { 
       ApplicationId = parameters.ServiceId, 
       ApplicationStatus = application.Status, 
       DateAdded = parameters.ParameterValue 
       }).ToList(); 

      return new ReadOnlyCollection<Application>(results); 
    } 
} 

는 예외의 메시지는 "내부 공급자가 열기에 실패했습니다."입니다 특정 라인은 내가 생각이와 var results = (from parameters in context.Parameters

입니다 강조 Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.
연결 문자열은 다음과 같다 :

,691 하나의 코드 현재 라이브 내가 가진 (희망없는 경우) 또는 내가 Inner Exception 메시지를 발견 할 때 뭔가 다른 인까지 무엇과 동일하지 않습니다 그
<connectionStrings> 
    <add name="ApplicationDBEntities" connectionString="metadata=res://*/ApplicationDBModel.csdl|res://*/ApplicationDBModel.ssdl|res://*/ApplicationDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

정보를 얻으려는 SQL database은 내가 직접 액세스 할 수있는 정보입니다. 이 계정에 IIS에 액세스 권한이 없거나 다른 것이있을 수 있습니까? 이 문제의 근본 원인을 찾으려고하는 힌트가 있습니까?

+0

개발 및 생산 환경에 대한 세부 정보를 제공해 주시겠습니까? 두 환경에서 IIS에 배포됩니까? –

+0

라이브에서 로컬로 IIS에 배포 됨 프로젝트의 속성/웹 탭에서 가상 디렉터리를 만들어 로컬 IIS에 추가했습니다. – MattR

+0

ActiveDirectory 사용자를 사용하여 SQL 데이터베이스로 이동합니까? 도메인 사용자를 생성하고 SQL에 추가하는 사이트)? –

답변

1

연결 문자열에는 intergated security = true가 있습니다. 즉, 사이트에서 IIS의 응용 프로그램 풀을 실행하는 사용자로 인증 된 데이터를 sql에서 가져 오려고합니다.

db에 대한 권한이 있거나 사용자 사이트의 다른 리소스에 대한 권한이있는 사용자별로 iis 응용 프로그램 풀을 실행해야합니다.

또 다른 가능성은 db로 이동하는 SQL 사용자가 있다는 것입니다. 설정 파일에서 연결 문자열을 변경해야합니다.

+0

DefaultAppPool을 내 로그인으로 실행되도록 변경 하시겠습니까? – MattR

+0

정상적으로 작동하지만 정상적인 것은 아닙니다. 즉, 해당 응용 프로그램 풀의 다른 모든 응용 프로그램이 이제 내 자격 증명으로 실행됨을 의미합니다. 사용할 수있는 표준 계정이 있습니까? 이전에는 NetworkService로 설정되었습니다. 또는 SQL을 업데이트하여 해당 집합을 가질 수 있습니까? – MattR

+0

내가 너라면,이 응용 프로그램을위한 특별한 응용 프로그램 풀을 만들 것입니다. –

관련 문제