Aplicativo IIS7 usando banco de dados errado do SQL Server 2008 Express

1

Estou perplexo. Eu tenho um site de cliente em um servidor virtual privado - Windows 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 sua ativação. Eu criei o aplicativo da 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 ao 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 um SqlException: "Invalid column name 'version'." Este é um dos novos campos - o que me leva a acreditar que o meu site dev está se referindo ao banco de dados de produção, e não ao banco de dados de desenvolvimento. Strings de conexão, no entanto, apontam para bancos de dados diferentes (embora o login seja o mesmo para ambos):

  • Site de produção: "Servidor =. \ SQLExpress; Banco de dados = myDbName; ID do usuário = myUserName; Senha = myUserPassword;"
  • Site de desenvolvimento: "Servidor =. \ SQLExpress; Banco de dados = DEVmyDbName; ID do usuário = myUserName; Senha = myUserPassword;"

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

UPDATE, após mais testes:

Eu mudei a string de conexão do site dev para

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

e criou um novo login do servidor SQL no banco de dados, e apenas deu acesso ao banco de dados dev. Eu também defino o banco de dados dev como o banco de dados padrão da conta. Eu removi o acesso ao banco de dados de desenvolvimento do login de produção. Quando tento acessar o site, recebo o seguinte erro:

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

Como resultado, há duas coisas que eu tenho certeza:

  1. Como está usando o novo nome de usuário para fazer login, sei que o aplicativo está usando a string 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.

    
por Remi Despres-Smyth 08.09.2010 / 16:04

2 respostas

2

Depois de cavar ainda mais, encontrei o culpado - era um problema de aplicativo, relacionado à configuração do NHibernate. Uma das opções de configuração do NHibernate que foi definida era "default_schema" - quando eu 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.

    
por 09.09.2010 / 13:49
0

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

Crie um novo userid / password apenas no sistema dev, mude sua string de conexão dev para usá-lo, se ele se conectar, o problema é 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.

    
por 08.09.2010 / 18:21