웹 프로젝트 (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
권한 을 선택 하고 부여 하십시오 .
답변
이 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 인증은 데이터베이스 서버에 연결하는 데 사용되기 때문입니다.
더 많은 정보는 여기에