잘못된 SQL Server 2008 Express 데이터베이스를 사용하는 IIS7 응용 프로그램

잘못된 SQL Server 2008 Express 데이터베이스를 사용하는 IIS7 응용 프로그램

나는 당황했다. 가상 개인 서버(Windows Web Server 2008 SP2, IIS7, SQL Server 2008 Express)에 클라이언트 사이트가 있습니다.

나는 업데이트가 시작되기 전에 그가 업데이트를 검토할 수 있도록 두 번째 웹 애플리케이션을 설정하려고 합니다. IIS7에서 웹 응용 프로그램을 만들고 SQL Server에 두 번째 데이터베이스를 추가했습니다. 두 번째 DB는 본질적으로 프로덕션 DB의 복사본이며, 데이터베이스 이름 앞에 'DEV'가 붙고 몇 개의 테이블에 몇 가지 새로운 필드가 있습니다.

내 생산 사이트가 잘 작동합니다. 그러나 테스트 사이트에서는 SqlException: "잘못된 열 이름 'version'"이 발생합니다. 이는 새로운 필드 중 하나입니다. 이로 인해 내 개발 사이트가 개발 데이터베이스가 아닌 프로덕션 데이터베이스를 참조하고 있다고 믿게 됩니다. 그러나 연결 문자열은 서로 다른 데이터베이스를 가리킵니다(로그인은 둘 다 동일하지만).

  • 프로덕션 사이트: "Server=.\SQLExpress;Database=myDbName;사용자 ID=myUserName;Password=myUserPassword;"
  • 개발 사이트: "서버=.\SQLExpress;데이터베이스=DEVmyDbName;사용자 ID=myUserName;비밀번호=myUserPassword;"

이것이 내가 놓친 것이 분명해야 할 것 같습니다. 한 동료가 두 번째 IIS 응용 프로그램을 위한 또 다른 응용 프로그램 풀을 만들 것을 제안했지만 별 도움이 되지 않은 것 같습니다.

추가 테스트 후 업데이트:

개발 사이트의 연결 문자열을 다음으로 변경했습니다.

"Server=.\SQLExpress;Database=DEVmyDbName;User ID=devuser;Password=myNewDifferentPassword;"

데이터베이스에 새 SQL 서버 로그인을 생성하고 dev 데이터베이스에 대한 액세스 권한만 부여했습니다. 또한 dev 데이터베이스를 계정의 기본 데이터베이스로 설정했습니다. 프로덕션 로그인에서 dev 데이터베이스에 대한 액세스를 제거했습니다. 사이트에 로그인하려고 하면 다음 오류가 발생합니다.

  • 서버 보안 주체 "devuser"는 현재 보안 컨텍스트에서 "myDbName" 데이터베이스에 액세스할 수 없습니다.

결과적으로 제가 확실히 알고 있는 두 가지 사실은 다음과 같습니다.

  1. 새 사용자 이름을 사용하여 로그인하므로 앱이 내가 제공하는 연결 문자열을 사용하고 있다는 것을 알 수 있습니다.
  2. 어떤 이유로 일단 로그인하면 지정된 데이터베이스를 무시하고 대신 프로덕션 데이터베이스를 사용하려고 시도하는 것으로 보입니다.

아직도 난처한 상태입니다.

답변1

좀 더 자세히 조사한 후에 범인을 찾았습니다. 이는 NHibernate 구성과 관련된 애플리케이션 문제였습니다. 설정된 NHibernate 구성 옵션 중 하나는 "default_schema"였습니다. 이를 제거하면 앱이 올바른 데이터베이스에 연결되기 시작했습니다.

default_schema 속성이 연결 문자열에 지정된 모든 데이터베이스를 재정의한 것으로 보입니다.

답변2

둘 이상의 연결 문자열이 있는 것 같습니다. 응용 프로그램 어딘가에 저장되어 있는 것이 가능합니까?

개발 시스템에서만 새 사용자 ID/비밀번호를 생성하고 이를 사용하도록 개발 연결 문자열을 변경하십시오. 연결되면 문제는 다른 곳에 있습니다.

SQL 정식 버전에 액세스할 수 있는 경우 SQLExpress 인스턴스에 대해 Profiler를 실행하고 활동을 모니터링할 수 있습니다.

관련 정보