문제

나는 하나를 뽑았다 ASPNETDB.MDF 내 로컬 컴퓨터에 대한 양식 인증을 사용하여 ASP 사이트용 서버에서 파일을 가져옵니다.ASP.NET 웹 사이트 구성 도구를 사용하여 데이터베이스 파일에 새 사용자를 추가했습니다.MDF 파일을 서버에 다시 업로드했는데 이제 사용자로 로그인하려고 할 때마다 다음 예외가 발생합니다.

Cannot open user default database. Login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

나는 인터넷 검색을 통해 여기 SO에서도 이 문제에 대한 다른 모든 솔루션을 읽었지만 작동하는 것을 찾지 못했습니다.

서버에는 SQL Server 2008이 있고 이것이 바로 VS 2008 Professional이 설치된 로컬 컴퓨터에서 사용하고 있는 것입니다.

내 연결 문자열은 다음과 같습니다(가독성을 위해 줄 바꿈이 추가됨).

<add name="ASPNETDBConnectionString1" 
     connectionString="Data Source=.\SQLEXPRESS;
                       AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
                       Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient"
/>

저는 SQL Server를 처음 접했기 때문에 어딘가에서 뭔가를 엉망으로 만들었다고 확신합니다.

어떤 도움이라도 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

구성과 관련하여 누가, 무엇을, 왜에 관한 모든 질문은 제쳐두고...

연결 문자열에서 문제를 추론할 수 있습니다.이는 SQL Express에 대해 로컬로 작동하지만 서버의 적절한 SQL에 대해서는 작동하지 않습니다.

첫 번째 단서는 SqlExpress만이 사용자 인스턴스를 활성화한다는 것입니다.SQL에서는 mdf를 첨부해야 합니다.

해당 연결 문자열이 VS 2008을 사용하는 동안 컴퓨터에서 작동한다면 SQL EXPRESS가 설치된 것입니다.해당 연결 문자열이 서버에서 작동하면 서버에 SQL EXPRESS가 설치된 것입니다.

서버에 Sql Express가 설치되어 있지 않고 사용자 인스턴스를 허용하도록 구성되어 있지 않은 경우에는 해당 연결 문자열로 인해 로그인 실패 예외가 발생합니다.

또한 귀하의 복사/복사 여부도 궁금합니다.일반적으로 복사하는 경우에도 활성 MDF에 대한 액세스가 거부됩니다.

클라이언트 측과 서버 측 모두 SQL 버전을 확인하고 두 web.config 파일의 이전 복사본을 찾아 연결 문자열을 비교해 보십시오.

다른 팁

당신의 문제는 당신이 데이터베이스의 차이를 추적하지 않는다는 것입니다. 로그인 그리고 데이터베이스 사용자. 로그인은 일반적으로 SQL Server에 액세스 할 수 있습니다. 데이터베이스 사용자는 특정 데이터베이스에 액세스 한 로그인입니다. 완료된대로 파일을 앞뒤로 복사하면 로그인 계정 (특히 Windows 계정)의 기본 식별자를 무효화 할 수 있습니다.

SQL 계정을 사용하여 Windows 계정이 아닌 SQL Server에 로그인하고 자격 증명을 web.config 파일에 배치하는 것이 좋습니다. 나는 이것이 Windows 계정 로그인보다 구성, 사용 및 변경하기가 훨씬 쉽다는 것을 알았습니다. 로그인이 설정되면 사용하려는 서버의 데이터베이스에 대한 사용자 액세스가 있는지 확인하십시오. 너 5월 여전히 전송 문제가 발생하지만 (가능성은 적지 만) 고치는 것이 훨씬 쉽습니다.

중요한 참고 : 다른 사람들은 동의하지 않습니다. Windows 계정이 더 안전하다고 주장 하면서이 문제에 대해 스스로 교육하고 싶을 수도 있습니다!

문제에 대한 설명이 불완전하거나 오류와 일치하지 않습니다.더 나은 답변을 얻으려면 좀 더 많은 정보를 제공해야 하지만 여기에 예비 답변이 있습니다.

이 오류는 애플리케이션이 SQL에 대한 통합 인증을 사용하고 있음을 나타냅니다.따라서 연결 문자열을 보는 것이 도움이 될 것입니다.어딘가에 'SSPI'라고 적혀 있을 것 같습니다.이는 앱 컨테이너가 실행되는 사용자(NETWORK SERVICE)가 데이터베이스에 연결을 시도하고 있지만 해당 권한이 없기 때문에 연결할 수 없다는 의미입니다.

따라서 수행한 작업의 일부로 연결 문자열을 변경했거나 NETWORK SERVICE가 이전에 데이터베이스 사용자였습니다(좋은 생각은 아닌 것 같습니다).

web.config에는 다른 보안 관련 설정이 있을 수 있습니다.앱에서 양식 인증을 사용하는 것 같습니다.IIS가 익명 액세스를 허용하도록 설정되어 있고 web.config가 가장을 수행하도록 설정된 경우 네트워크 서비스가 SQL에 연결을 시도할 수도 있습니다.

애플리케이션은 어떻게 연결되어야 합니까?양식 인증을 통해 인증하는 모든 사용자가 데이터베이스 작업을 위해 거쳐야 하는 서비스 계정(단일 사용자 계정)이 있습니까?그렇다면 사용자와 비밀번호를 포함하도록 데이터베이스 연결 문자열을 변경해야 합니다.

이 문제를 해결하려면 연결 문자열, web.config의 양식 인증 관련 설정, IIS의 보안 설정을 확인해야 합니다.이 중 어느 것도 사용자를 추가했다는 사실과 관련이 없다고 생각합니다.

편집하다:제가 의심했던 것처럼 통합 보안을 사용하고 계시군요.사용자가 자신의 사용자 ID로 앱에 대해 인증하는 동안 앱은 통합 인증을 사용하여 데이터베이스에 대해 인증하기 때문에 이는 Forms Auth에서는 작동하지 않습니다.네트워크 서비스.데이터베이스 서비스 계정인 imo가 필요합니다. 연결 문자열을 변경하지 않았다면 이전에 이것이 어떻게 작동했을지 모르겠습니다.

이 응용 프로그램 풀 -> 고급 설정 -> 프로세스 모델 -> Identity를 변경해 볼 수 있습니까?

프로세스 모델을 변경하여 동일한 오류와 수정을 받았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top