
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:
- 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;
- 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.