Question

J'ai extrait un fichier ASPNETDB.MDF d'un serveur pour un site ASP à l'aide de l'authentification par formulaires sur mon ordinateur local. J'ai ajouté un nouvel utilisateur au fichier de base de données à l'aide de l'outil de configuration de site Web ASP.NET. J'ai téléchargé le fichier MDF sur le serveur et je reçois maintenant l'exception suivante chaque fois que j'essaie de me connecter en tant qu'utilisateur:

Impossible d'ouvrir la base de données par défaut de l'utilisateur. Échec de la connexion.
Échec de la connexion pour l'utilisateur 'NT AUTHORITY \ NETWORK SERVICE'

J'ai aussi cherché sur Google et lu toutes les autres solutions à ce problème ici sur SO et je n'ai rien trouvé qui fonctionne.

SQL Server 2008 est installé sur le serveur et c’est ce que j’utilise sur mon ordinateur local avec VS 2008 Professional.

Ma chaîne de connexion est (sauts de ligne ajoutés pour la lisibilité):

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

Je suis nouveau sur SQL Server, donc je suis presque sûr d'avoir quelque chose de foiré quelque part.

Toute aide est grandement appréciée.

Était-ce utile?

La solution

Toutes les questions concernant qui ou quoi ou pourquoi concernant la configuration de côté ...

Votre problème peut être déduit de la chaîne de connexion. Cela fonctionnera localement contre SQL Express mais pas contre SQL proprement dit sur le serveur.

Le premier indice est que seul SqlExpress active les instances utilisateur. Sur SQL proprement dit, vous devrez joindre le mdf.

Si cette chaîne de connexion fonctionne sur votre ordinateur sous VS 2008, SQL EXPRESS est installé. Si cette chaîne de connexion fonctionne sur le serveur, SQL EXPRESS est installé sur le serveur.

Si Sql Express n'est PAS installé sur le serveur et configuré pour autoriser les instances d'utilisateur, comme je l'espère, cette chaîne de connexion entraînera l'exception d'échec de connexion que vous rencontrez.

Je me pose également des questions sur votre copie to / from. En règle générale, l'accès à un fichier MDF actif sera refusé, même pour la copie.

Veuillez confirmer les versions de Sql côté client et côté serveur et essayer de trouver une copie précédente des deux fichiers web.config pour comparer les chaînes de connexion.

Autres conseils

Je pense que votre problème est que vous ne gardez pas trace de la différence entre une base de données connexion et un utilisateur de la base de données. Une connexion donne accès à SQL Server ( en général). Un utilisateur de base de données est une connexion qui a eu accès à une base de données spécifique. Lorsque vous copiez des fichiers comme précédemment, vous pouvez invalider l'identifiant sous-jacent d'un compte de connexion (notamment les comptes Windows).

Je vous conseillerais d'utiliser un compte SQL pour vous connecter à votre serveur SQL (plutôt qu'un compte Windows) et de placer les informations d'identification dans le fichier web.config. J'ai simplement constaté qu'il est beaucoup plus facile de configurer, utiliser et modifier qu'un compte Windows. Une fois que votre connexion est configurée, assurez-vous qu’elle dispose également d’un accès utilisateur à la base de données sur le serveur que vous souhaitez utiliser. Vous pouvez toujours rencontrer des problèmes de transfert (même s’ils sont moins probables), mais les résoudre est un peu plus facile.

Remarque importante: d’autres ne sont pas d’accord, affirmant que les comptes Windows sont plus sécurisés. Vous voudrez peut-être vous renseigner sur ce problème!

Votre description du problème est incomplète ou ne correspond pas à l'erreur. Vous devrez fournir un peu plus d'informations pour une meilleure réponse, mais voici ma réponse préliminaire.

L'erreur indique que votre application utilise l'authentification intégrée au SQL. Donc, il serait utile de voir la chaîne de connexion. Il est probablement écrit «SSPI» quelque part. Cela signifie que l'utilisateur sous lequel le conteneur d'applications s'exécute (NETWORK SERVICE) tente de se connecter à la base de données et qu'il ne le peut pas car il n'est pas autorisé à le faire.

Donc vous avez soit changé la chaîne de connexion dans le cadre de ce que vous avez fait, soit NETWORK SERVICE était auparavant un utilisateur de base de données (ce n'est pas une bonne idée, je pense).

Votre paramètre web.config contient d'autres paramètres liés à la sécurité. Votre application semble utiliser l'authentification par formulaire. Si IIS est configuré pour autoriser l’accès anonyme et que votre Web.config est configuré pour effectuer l’emprunt d’emprunt d’identité, le NETWORK SERVICE tentera également de se connecter à SQL.

Comment l'application est-elle censée se connecter? Avez-vous un compte de service (un seul compte d'utilisateur) que tous les utilisateurs qui s'authentifient via l'authentification par formulaires doivent passer pour les opérations de base de données? Si tel est le cas, vous devez modifier la chaîne de connexion de votre base de données afin qu'elle contienne un utilisateur et un mot de passe.

Pour résoudre ce problème, vous devez vérifier votre chaîne de connexion, tous les paramètres relatifs à forms-auth dans le fichier Web.config, ainsi que les paramètres de sécurité dans IIS. Je pense que rien de tout cela n’a à voir avec le fait que vous ayez ajouté un utilisateur.

Modifier: Donc, vous utilisez la sécurité intégrée, comme je le soupçonnais. Cela ne fonctionnera pas avec Forms Auth, car lorsqu'un utilisateur s'authentifie auprès de votre application avec son ID utilisateur, votre application s'authentifie auprès de la base de données avec une autorisation intégrée, c'est-à-dire NETWORK SERVICE. Vous avez besoin d’un compte de service de base de données, imo, et je ne sais pas comment cela aurait pu fonctionner si vous n’aviez pas modifié la chaîne de connexion.

Pouvez-vous essayer de changer cela Pools d'applications - > Paramètres avancés - > Modèle de processus - > Identité ?

J'ai eu la même erreur et corrigé en changeant le modèle de processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top