Domanda

Ho rimosso un file ASPNETDB.MDF da un server per un sito ASP utilizzando l'autenticazione Forms sul mio computer locale. Ho aggiunto un nuovo utente al file di database utilizzando lo strumento di configurazione del sito Web ASP.NET. Ho caricato il file MDF sul server e ora ottengo la seguente eccezione ogni volta che provo ad accedere come qualsiasi utente:

Impossibile aprire il database predefinito dell'utente. Accesso non riuscito.
Accesso non riuscito per l'utente "NT AUTHORITY \ NETWORK SERVICE"

Ho cercato su Google e ho letto tutte le altre soluzioni a questo problema anche qui su SO e non ho trovato nulla che funzioni.

Il server ha SQL Server 2008 ed è quello che sto usando sul mio computer locale con VS 2008 Professional.

La mia stringa di connessione è (interruzioni di riga aggiunte per leggibilità):

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

Sono nuovo di SQL Server, quindi sono abbastanza sicuro di aver rovinato qualcosa da qualche parte.

Qualsiasi aiuto è molto apprezzato.

È stato utile?

Soluzione

Tutte le domande su chi o cosa o perché riguardo alla configurazione a parte ...

Il problema può essere dedotto dalla stringa di connessione. Funzionerà localmente con sql express ma non con sql proprio sul server.

Il primo indizio è che solo SqlExpress abilita le istanze utente. Su SQL proprio dovrai allegare il mdf.

Se quella stringa di connessione funziona sul computer in VS 2008, è installato SQL EXPRESS. Se quella stringa di connessione funziona sul server, nel server è installato SQL EXPRESS.

Se sul server NON è installato e configurato Sql Express per consentire le istanze utente, come spero, la stringa di connessione comporterà l'eccezione di errore di accesso che si sta verificando.

Mi chiedo anche la tua copia da / a. In genere verrà negato l'accesso a un mdf attivo, anche per la copia.

Conferma le versioni SQL sia lato client che lato server e prova a trovare una copia precedente di entrambi i file web.config per confrontare le stringhe di connessione.

Altri suggerimenti

Penso che il tuo problema sia che non stai tenendo traccia della differenza tra un database login e un database utente. Un accesso dà accesso a SQL Server ( in generale). Un utente del database è un account di accesso a cui è stato concesso l'accesso a un database specifico. Quando si copiano i file avanti e indietro, è possibile invalidare l'identificatore sottostante per un account di accesso (in particolare account Windows).

Vorrei suggerire di utilizzare un account SQL per accedere al proprio server SQL (anziché un account Windows) e posizionare le credenziali nel file web.config. Ho semplicemente scoperto che questo è molto più facile da configurare, utilizzare e modificare rispetto all'accesso a un account Windows. Una volta impostato il tuo login, assicurati che abbia anche l'accesso dell'utente al database sul server che desideri utilizzare. potresti incontrare ancora problemi di trasferimento (anche se sono meno probabili), ma risolverli è un po 'più semplice.

Nota importante: altri non sono d'accordo - sostenendo che gli account Windows sono più sicuri - quindi potresti voler educare te stesso su questo problema!

La descrizione del problema è incompleta o non coerente con l'errore. Dovrai fornire un po 'più di informazioni per una risposta migliore, ma ecco la mia risposta preliminare.

L'errore indica che l'applicazione utilizza l'autenticazione integrata su SQL. Quindi, sarebbe utile vedere la stringa di connessione. Probabilmente dice "SSPI" da qualche parte. Ciò significa che l'utente nel quale il contenitore dell'app è in esecuzione (SERVIZIO DI RETE) sta tentando di connettersi al database e non può farlo perché non dispone dell'autorizzazione per farlo.

Quindi hai modificato la stringa di connessione come parte di ciò che hai fatto, oppure NETWORK SERVICE era precedentemente un utente del database (non è una buona idea, penso).

Esistono altre possibili impostazioni relative alla sicurezza nel tuo web.config. L'app sembra utilizzare l'autenticazione basata su moduli. Se IIS è impostato per consentire l'accesso anonimo e web.config è impostato per eseguire la rappresentazione, ciò potrebbe anche causare il SERVIZIO DI RETE che tenta di connettersi a SQL.

Come dovrebbe connettersi l'applicazione? Hai un account di servizio (un singolo account utente) che tutti gli utenti che eseguono l'autenticazione tramite l'autenticazione tramite moduli devono passare per le operazioni del database? In tal caso, è necessario modificare la stringa di connessione al database per contenere un utente e una password.

Per risolvere questo problema, è necessario controllare la stringa di connessione, tutte le impostazioni relative all'autorizzazione dei moduli in web.config e le impostazioni di sicurezza in IIS. Niente di tutto ciò penso che abbia a che fare con il fatto che tu abbia aggiunto un utente.

Modifica: Quindi stai usando la sicurezza integrata, come sospettavo. Questo non funzionerà con Forms Auth, poiché mentre un utente esegue l'autenticazione con l'app con il proprio ID utente, l'app esegue l'autenticazione con il database con autenticazione integrata, ad esempio SERVIZIO DI RETE. È necessario un account del servizio database, imo, e non so come possa aver funzionato prima se non si modifica la stringa di connessione.

Puoi provare a cambiarlo Pool di applicazioni: > Impostazioni avanzate - > Modello di processo - > Identità ?

Ho avuto lo stesso errore e la stessa correzione cambiando il modello di processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top