Pergunta

Eu puxei um arquivo ASPNETDB.MDF fora de um servidor para um site ASP usando autenticação de formulários para a minha máquina local. Eu adicionei um novo usuário para o arquivo de banco de dados usando a ferramenta de configuração do site ASP.NET. I carregado nas costas MDF arquivo para o servidor e agora eu recebo a seguinte exceção sempre que eu tente fazer login como qualquer usuário:

Cannot open user default database. Login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

I foram pesquisando e ler todas as outras soluções para este problema aqui no SO bem e não ter encontrado qualquer coisa que funciona.

O servidor tem SQL Server 2008 sobre ele e é isso que eu estou usando em minha máquina local com o VS 2008 Professional.

Meu seqüência de conexão é (quebras de linha adicionadas para legibilidade):

<add name="ASPNETDBConnectionString1" 
     connectionString="Data Source=.\SQLEXPRESS;
                       AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
                       Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient"
/>

Eu sou novo para SQL Server, então eu tenho certeza que eu errei alguma coisa em algum lugar.

Qualquer ajuda é muito apreciada.

Foi útil?

Solução

Todas as perguntas sobre quem ou o que ou por que a respeito da configuração de lado ...

Seu problema pode ser deduzida a partir da seqüência de conexão. Que irá trabalhar localmente contra expressa sql mas não contra adequada sql no servidor.

O primeiro indício é que apenas sqlexpress permite instâncias de usuário. No SQL apropriada você terá de anexar o mdf.

Se essa seqüência de conexão funciona em sua máquina enquanto no VS 2008, você tem SQL Express instalado. Se essa seqüência de conexão funciona no servidor, em seguida, o servidor SQL Express instalado.

Se o servidor não tenha o SQL Express instalado e configurado para permitir que instâncias de usuário, como eu espero que isso não aconteceu, que string de conexão irá resultar na exceção falha de login que está ocorrendo.

Gostaria também de saber sobre a sua cópia de / para. Normalmente o acesso será negado um mdf ativo, mesmo para copiar.

Por favor, confirme as versões do SQL lado cliente e servidor e tentar encontrar uma cópia anterior de ambos os arquivos web.config para comparar seqüências de conexão.

Outras dicas

Eu acho que o problema é que você não está mantendo o controle da diferença entre um banco de dados login e um banco de dados user. Um login dá acesso ao SQL Server ( em geral). Um usuário do banco de dados é um login que tem sido dado acesso a um banco de dados específico. Quando você copiar arquivos e para trás como você fez, você pode invalidar o identificador subjacente para uma conta de login (especialmente contas do Windows).

Gostaria de sugerir que você usar uma conta SQL para fazer login no seu servidor SQL (em vez de uma conta do Windows) e coloque as credenciais no arquivo web.config. Eu achei simplesmente que este é muito mais fácil de configurar, uso e mudança do que um login de conta do Windows. Uma vez que o seu login está configurado, apenas certifique-se que ele também tem o acesso do usuário ao banco de dados no servidor que você deseja usar. Você pode ainda correr em problemas de transferência (embora eles são menos provável), mas corrigi-los é um pouco mais fácil.

Nota importante: outros discordam - argumentando que as contas do Windows são mais seguros - assim você pode querer educar-se sobre esta questão!

A sua descrição do problema está incompleta ou não consistente com o erro. Você precisará fornecer um pouco mais de informações para uma resposta melhor, mas aqui é a minha resposta preliminar.

O erro indica que seu aplicativo está usando autenticação integrada para SQL. Então, ele iria ajudar a ver a seqüência de conexão. Ele provavelmente diz em algum lugar 'SSPI'. O que isto significa é que o usuário que o recipiente aplicativo está sendo executado como (serviço de rede) está tentando se conectar ao banco de dados, e pode não porque ele não tem a permissão para fazê-lo.

Para que você ou mudou a seqüência de conexão como parte do que você fez, ou SERVIÇO DE REDE anteriormente era um usuário de banco de dados (não é uma boa idéia, eu acho).

Existem outras possíveis configurações relacionadas à segurança em jogo no seu web.config. Seu aplicativo parece autenticação de uso formas. Se o IIS está configurado para permitir acesso anônimo e seu web.config está definido para fazer a representação, em seguida, que também poderia causar o serviço NETWORK tentando se conectar ao SQL.

Como é a aplicação deveria ligar? Você tem uma conta de serviço (uma única conta de usuário) que todos os usuários que autenticar através de formas de autenticação deve passar para as operações de banco de dados? Se sim, então você precisa mudar sua seqüência de conexão de banco de dados para conter um usuário e senha.

Para corrigir isso, você precisa verificar a cadeia de ligação, todos os formulários-auth configurações relacionadas no web.config, e as configurações de segurança no IIS. Nada disso eu acho que tem a ver com o fato de que você adicionou um usuário.

Edit: Então você está usando segurança integrada, como eu suspeitava. Isso não vai funcionar com formulários Auth, porque enquanto um usuário está autenticando contra a sua aplicação com o seu ID de usuário, seus autentica de aplicativos no banco de dados com autenticação integrada, ou seja, rede de serviços. Você precisa de uma conta de serviço de banco de dados, imo, e eu não sei como isso pode ter funcionado antes, se você não mudar a seqüência de conexão.

Você pode tentar mudar esta Aplicação Piscinas> Configurações avançadas -> Modelo de Processo -> Identidade ?

Eu tenho o mesmo erro e correção, alterando o modelo de processo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top