[C#] 사용자 ‘IIS APPPOOL \ ASP.NET v4.0’에 대한 로그인 실패

웹 프로젝트 (C # Asp.Net, EF 4, MS SQL 2008 및 IIS 7)가 있으며 IIS 7로 로컬로 마이그레이션해야합니다 (현재 CASSINI에서 잘 작동 함).

IIS에서는 로컬로 Default Web Site배포가 있습니다. 내 배포 및 Default Web Site풀 ASP.NET v4.0 (설정 이미지 참조)에서 풀 대상 Framework 4를 웹 프로젝트로 사용합니다.
풀 설정
사이트를 방문하면 브라우저에 페이지가 표시되지 않고 브라우저가 페이지를 대신 다운로드 할 수 있습니다.

IIS에서 로컬로 실행되는 다른 프로젝트가 있으며 아무런 문제없이 작동하지만 Entity Framework는 사용하지 않습니다.

이벤트 로거를 사용하면 아래와 같은 오류가 나타납니다.

Exception information:
    Exception type: EntityException
    Exception message: The underlying provider failed on Open.
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)


    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.SqlClient.SqlConnection.Open()
       at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

관련 질문

업데이트 :이 질문에 대한 자료에서 MS SQL 2008에 대한 권한을 수동으로 부여해야한다는 것을 읽을 수 있습니다. IIS 7.5 및 MS SQL 2008 R2를 사용하면 수동 권한을 설정할 필요가 없습니다.



답변

SQL Server에 대한 연결을 열려고하지 않는 것 같습니다.

IIS APPPOOL\ASP.NET v4.0데이터베이스에 대한 권한을 부여 하려면 SQL Server에 로그인을 추가해야 합니다.

SSMS의 서버에서 보안을 펼친 다음 로그인을 마우스 오른쪽 단추로 클릭하고 “새 로그인 …”을 선택하십시오.

새 로그인 대화 상자에서 로그인 이름으로 앱 풀을 입력하고 “확인”을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 앱 풀의 로그인을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 “사용자 매핑”을 선택하십시오. 적절한 데이터베이스 및 적절한 역할을 확인하십시오. 나는 당신이 단지 선택 수 있다고 생각 db_datareader하고 db_datawriter,하지만 난 당신이 EF를 통해 그렇게 할 경우 당신은 여전히 저장 프로 시저를 실행하는 권한을 부여해야합니다 생각합니다. 여기 에서 역할에 대한 세부 사항을 확인할 수 있습니다 .


답변

IIS7-> 응용 프로그램 풀-> 고급 설정에서 ApplicationPoolIdentity를 변경할 수 있습니다.
고급 설정

ApplicationPoolIdentity 아래에 로컬 시스템이 있습니다. 그러면 응용 프로그램 NT AUTHORITY\SYSTEM이 기본적으로 데이터베이스에 대한 기존 로그인 인에서 실행됩니다 .

편집 :이 제안을 적용하기 전에 보안 관련 사항에 유의하고 이해해야합니다.


답변

당신이 가지고 있는지 확인하십시오 …

Trusted_Connection=false;

연결 문자열에


답변

다음 이미지와 같이 SQL을 사용 하여이 문제를 해결했습니다.

db-> 특성-> 권한-> 서버 권한보기->를 마우스 오른쪽 단추로 클릭 한 후 IIS APPPOOL\ASP.NET v4.0권한 을 선택 하고 부여 하십시오 .

db


답변

이 SQL 스크립트를 실행

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool]
      FROM WINDOWS WITH DEFAULT_DATABASE=[master],
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser]
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO


답변

의 경우 연결 문자열을 지정한 :

User ID=xxx;Password=yyy

그러나 연결 문자열 에는 다음이 있습니다.

Trusted_Connection=true;

SQL Server는 Windows 인증을 사용하므로 연결 값이 무시되고 무시됩니다 (IIS는 Identity 사용자 프로필에 지정된 Windows 계정을 사용합니다).
더 많은 정보는 여기에

연결 문자열에 다음이 있는 경우에도 동일하게 적용됩니다 .

 Integrated Security = true;

또는

 Integrated Security = SSPI;

Windows 인증은 데이터베이스 서버에 연결하는 데 사용되기 때문입니다.
더 많은 정보는 여기에


답변

iis로 이동-> 응용 프로그램 풀-> 응용 프로그램에 사용 된 응용 프로그램 풀 찾기

여기에 이미지 설명을 입력하십시오

응용 프로그램에 사용되는 응용 프로그램 풀을 선택하고 마우스 오른쪽 단추를 클릭하여 고급 설정을 선택하십시오.

여기에 이미지 설명을 입력하십시오

응용 프로그램 풀 ID 선택
여기에 이미지 설명을 입력하십시오

로컬 시스템으로 내장을 선택하고 확인을 클릭하십시오.