Aplicativo IIS7 usando banco de dados SQL Server 2008 Express incorreto

Aplicativo IIS7 usando banco de dados SQL Server 2008 Express incorreto

Estou perplexo. Eu tenho um site cliente em um servidor virtual privado - Windows Web Server 2008 SP2, IIS7, SQL Server 2008 Express.

Estou tentando configurar um segundo aplicativo da web para permitir que ele revise as atualizações antes de serem lançadas. Criei o aplicativo Web no IIS7 e adicionei um segundo banco de dados ao SQL Server. O segundo banco de dados é essencialmente uma cópia do banco de dados de produção, com 'DEV' prefixado no nome do banco de dados e alguns novos campos em algumas tabelas.

Meu site de produção funciona bem. No entanto, o site de teste retorna com uma SqlException: "Nome de coluna inválido 'versão'." Este é um dos novos campos - o que me leva a acreditar que meu site de desenvolvimento está se referindo ao banco de dados de produção, e não ao banco de dados de desenvolvimento. As strings de conexão, entretanto, apontam para bancos de dados diferentes (embora o login seja o mesmo para ambos):

  • Site de produção: "Server=.\SQLExpress;Database=myDbName;User ID=myUserName;Password=myUserPassword;"
  • Site de desenvolvimento: "Servidor=.\SQLExpress;Database=DEVmyDbName;User ID=myUserName;Password=myUserPassword;"

Parece que isso deveria ser algo óbvio que estou perdendo. Um colega sugeriu que eu criasse outro pool de aplicativos para o segundo aplicativo IIS, mas parece não ter ajudado.

ATUALIZAÇÃO, após mais testes:

Alterei a string de conexão do site de desenvolvimento para

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

e criei um novo login do servidor SQL no banco de dados e apenas concedi acesso ao banco de dados de desenvolvimento. Também defini o banco de dados de desenvolvimento como o banco de dados padrão da conta. Removi o acesso ao banco de dados de desenvolvimento do login de produção. Quando tento fazer login no site, recebo o seguinte erro:

  • O servidor principal "devuser" não consegue acessar o banco de dados "myDbName" no contexto de segurança atual.

Como resultado, há duas coisas que tenho certeza:

  1. Como ele está usando o novo nome de usuário para fazer login, sei que o aplicativo está usando a cadeia de conexão que estou alimentando;
  2. Por algum motivo, uma vez logado, parece estar ignorando o banco de dados especificado e tentando usar o banco de dados de produção.

Ainda perplexo.

Responder1

Depois de pesquisar ainda mais, encontrei o culpado - era um problema de aplicativo relacionado à configuração do NHibernate. Uma das opções de configuração do NHibernate definida foi "default_schema" - quando o removi, o aplicativo começou a se conectar ao banco de dados correto.

Parece que a propriedade default_schema estava substituindo qualquer banco de dados especificado na cadeia de conexão.

Responder2

Parece que você tem mais de uma cadeia de conexão; é possível que haja um armazenado em algum lugar no aplicativo?

Crie um novo ID de usuário/senha apenas no sistema de desenvolvimento, altere sua string de conexão de desenvolvimento para usá-la; se conectar, o problema está em outro lugar.

Se você tiver acesso à versão completa do SQL, poderá executar o Profiler na instância do SQLExpress e monitorar a atividade.

informação relacionada