
나는 당황했다. 가상 개인 서버(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
좀 더 자세히 조사한 후에 범인을 찾았습니다. 이는 NHibernate 구성과 관련된 애플리케이션 문제였습니다. 설정된 NHibernate 구성 옵션 중 하나는 "default_schema"였습니다. 이를 제거하면 앱이 올바른 데이터베이스에 연결되기 시작했습니다.
default_schema 속성이 연결 문자열에 지정된 모든 데이터베이스를 재정의한 것으로 보입니다.
답변2
둘 이상의 연결 문자열이 있는 것 같습니다. 응용 프로그램 어딘가에 저장되어 있는 것이 가능합니까?
개발 시스템에서만 새 사용자 ID/비밀번호를 생성하고 이를 사용하도록 개발 연결 문자열을 변경하십시오. 연결되면 문제는 다른 곳에 있습니다.
SQL 정식 버전에 액세스할 수 있는 경우 SQLExpress 인스턴스에 대해 Profiler를 실행하고 활동을 모니터링할 수 있습니다.