2013-02-19 3 views
3

개발자 MVC4 + EF 코드 우선 + SQL Server 2008 웹 응용 프로그램이 있습니다. IIS7을 사용하여 서버를 구축했습니다. 새 자격 증명을 만들었습니다. PC. 빈 데이터베이스 PCDB을 SQL Server에 추가하고 소유자 권한으로 사용자 PC에 할당했습니다. 웹 앱을 실행하면 오류가 발생합니다.EF 코드 먼저 데이터베이스 자격 증명을 올바르게 설정하는 방법

데이터베이스에 모델 메타 데이터가 없으므로 모델 호환성을 확인할 수 없습니다. 모델 호환성은 코드 첫 번째 또는 코드 첫 번째 마이그레이션을 사용하여 생성 된 데이터베이스에 대해 확인할 수 있습니다

내 연결 문자열은

data source=174.xx.x.x;initial catalog=pcdb;user id=pc;password=xxxxx; 

예외는 이해할 수있다, 나는 PCDB 데이터베이스를 삭제하고 EFCode 먼저 그것을 만들 수 있습니다입니다 그 자체로. 그렇다면 자격 증명은 어떻습니까 PC? PC 사용자를 관리자로 지정하고 싶지는 않지만 EF Code First는 SQL Server에서 새 데이터베이스를 만들 수 없습니다.

어떻게 문제를 해결할 수 있습니까?

+0

토마스, 알아 냈습니까? 나는 현재 같은 문제에 직면하고있다. –

답변

0

전체적인 디자인은 WebsiteASP.NET/ IIS에서 폼 또는 Windows 인증을 시작합니다. 으로 끝나고 원하는 응용 프로그램 및 DB 인증으로 끝납니다. 응용 프로그램 권한 부여는 다른 주제입니다. 나는 여기서 그것을 논하지 않을 것이다.

원하는 인증 모델을 명시하지 마십시오. 그래서 면책 조항부터 시작하겠습니다. 프로덕션 사이트에서 사용할 제안입니다. 그러나 그것은 궁극적 인 최종 게임이 아니며 고려해야 할 유일한 단기 해결책도 아닙니다.

은 한 사람 쇼 작업 얻을 수있는 솔루션입니다. 안전하고 과도한 관리 노력없이 계속 실행하십시오.

Windows 인증을 통해 SQL 서버 로그온 사용 그러나 모든 사용자를 SQL 서버에 추가 할 필요는 없습니다.
가장 (impersonation) 옵션도 있습니다. 그러나 그것은 까다로울 수 있고이 설명은 가장이 아닙니다. 그것은 또 다른 접근법입니다.

는 Windows 인증을 사용하도록 Windows 인증

설정 IIS를 사용하고 있는지 웹 사이트를 확인하십시오 enter image description here

이제 APP 풀을 구성한 IIS의 웹 사이트 뒤에. .

나는 시작에 좋은 방법으로 APP 풀에서 Psuedo-service 사용자를 제안하려고합니다. 예 : WEBAPPLICATION_X_USER. APP 풀당 별도의 사용자를 가질 수 있습니다. 각 사용자는 해당 DB에만 액세스 할 수 있습니다. 따라서 애플리케이션 분리가 가능합니다. 여기에 사용자와 비밀번호를 입력하십시오. IIS는 필요에 따라 암호화하고 해독합니다. (Web.config의 텍스트보다 좋습니다)

enter image description here 이 사용자는 서버 자체에서 인증을 줄여야합니다. 도메인 또는 로컬 관리자의 ADMIN 사용자가 아닙니다. 그냥 충분히 SQL 서버를 사용하여 DB를 만들 수 있습니다.일반 Windows 사용자를 만들려면

ASP.Net에서 DB에 로그온하도록 허용하십시오. ASP.net에서 암호를 암호화하고 해독하도록하십시오.

Special service user permissions in SQL server

은 그래서 지금의 상황은 IIS의 Windows AUTH입니다. IIS에는 SQL 서버에 로그온 할 수있는 특별한 Windows 사용자가있는 App 풀이 있습니다. 이 사용자를 SQL Server 인스턴스에 추가했으며이 서비스 사용자에게 DB 생성 기능을 할당했습니다. 사용자에게 모든 Dbs에 대한 액세스 권한을 부여하면 안됩니다. 플러스 공용 액세스 (EF를 통해).

웹 앱에서 사용자 자격 증명 상황을 확인하십시오. [System.Security.Principal.WindowsIdentity] Windows 인증 된 최종 사용자를 표시해야합니다.

System.Environment.UserName에는 IIS APP POOL에 배치 한 서비스 사용자 ID가 있어야합니다. EF 만들거나 SQL 서버 인스턴스에 액세스 데이터로 전환 될 때의 Web.config 항목이 Windows 통합 보안을 사용하도록 설정되어있는 경우

는 지금, 그것은 System.Environment.UserName로 연결됩니다

<connectionStrings> 
<add name="DbContextName" connectionString="Data Source=Your SQL server Instance;Initial Catalog=The DBNAME;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 

그리고 당신은 인증 된 사용자을 알고 있습니다. httpContext스레드 현재 교장처럼 당신에게 줄 것입니다. HttpContext.User는 기본적으로 {System.Security.Principal.WindowsPrincipal}에 매핑됩니다.

응용 프로그램 수준 검사를 수행 할 수 있습니다. 동일한 접근 방식은 양식 인증에서도 작동해야합니다.

경고 : 창을 경우,이 방법은 변경되지 더 복잡하고 더 이상 최적의 장소가 시작되어야한다 (즉, 당신이 IIS 따라서 어떤 APP 풀을 사용하지 않는) 접근 방식을 WPF.

도움이되기를 바랍니다.

+0

필 필자는 Tomas가 찾고 있던 것이 SQL 서버에서 계정을 설정하는 방법 이었기 때문에 EF 연결 문자열 sysadmin에 지정된 데이터베이스 사용자없이 코드 첫 번째 데이터베이스 생성이 작동한다는 것을 알았습니다. 적어도 내 생각 엔 똑같은 것이 필요해. –

관련 문제