La connexion SQLExpress échoue dans IIS 7 avec l'erreur d'instance utilisateur - "Échec de la génération d'une instance utilisateur

StackOverflow https://stackoverflow.com/questions/7366295

Question

Je cherche principalement à répondre à ma question n°1 ci-dessous, mais plus de connaissances seraient appréciées.

J'ai essayé d'utiliser ces ressources au cours de mon enquête, mais sans succès :

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/f5eb164d-9774-4864-ae05-cac99740949b (Pour cette erreur : Échec de la génération d'une instance utilisateur de SQL Server en raison d'un échec de récupération du chemin d'accès aux données de l'application locale de l'utilisateur.Veuillez vous assurer que l'utilisateur dispose d'un profil d'utilisateur local sur l'ordinateur.La connexion sera coupée.)

http://social.msdn.microsoft.com/forums/en-US/sqlexpress/thread/6dfdcc22-7a81-4e8f-a947-c1ce6982d4b3/ (Pour cette erreur : Autorisation CREATE DATABASE refusée dans la base de données principale.Une tentative de joindre une base de données nommée automatiquement pour le fichier ?échoué.Une base de données portant le même nom existe, ou le fichier spécifié ne peut pas être ouvert, ou il se trouve sur le partage UNC.)

Des questions

1.) Pourquoi cette erreur se produit-elle lors de l'exécution du projet Telerik Rad Controls pour ASP.NET AJAX "Live Demos" avec IIS 7 (l'exécution de Telerik Live Demos fonctionne correctement en utilisant le serveur de développement ASP.NET avec cette chaîne de connexion)

Échec de la génération d'une instance utilisateur de SQL Server en raison d'un échec de récupération du chemin d'accès aux données de l'application locale de l'utilisateur.Veuillez vous assurer que l'utilisateur dispose d'un profil d'utilisateur local sur l'ordinateur.La connexion sera coupée.

2.) En quoi la création d'instances SQL Server Express est-elle différente dans IIS 7, à partir d'ASP.NET Development Server et de SSMSE

3.) Certains attributs d'une chaîne de connexion SQL ne sont-ils pas autorisés lors de l'exécution d'un site Web dans différents contextes (basé sur le point 2).

Environnement:

Je n'exécute pas l'application Web "Live Demos" .NET 3.5 ASP.NET via le serveur de développement ASP.NET (fonctionnalité qui apparaît dans votre barre d'état système et sélectionne un port pour vous après avoir cliqué sur Lecture dans Visual Studio).Cela fonctionne très bien !J'utilise le site Web sur IIS 7.SQL Server Express utilise l'utilisateur SERVICE RÉSEAU dans Panneau de configuration > Outils d'administration > Services > SQL Server (SQLExpress).

À l'aide de cette chaîne de connexion fournie avec le projet de démonstration de l'application Web « Live Demos » installé :

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

J'ai essayé de définir "User Instance=False", mais cela génère simplement une autre erreur :

Autorisation CREATE DATABASE refusée dans la base de données principale.Une tentative de joindre une base de données nommée automatiquement pour le fichier ?échoué.Une base de données portant le même nom existe, ou le fichier spécifié ne peut pas être ouvert, ou il se trouve sur le partage UNC.

(où "?" est le chemin du fichier *.mdf - C:\Users\\MyDocuments\Visual Studio 2008\Projects elerikDemos elerik adControls for ASP.NET AJAX Q2 2011\Live Demos\App_Data orthwind.mdf ..L'italique de Stack Overflow est rompu avec certains de ces caractères, j'ai donc dû supprimer ce chemin)

Quelqu'un m'a répondu à une question précédente pour définir cette "Instance utilisateur = False", mais il semble que les instances utilisateur n'aient rien à voir avec le fait que vous utilisiez ou non SQL Express.Les instances utilisateur sont simplement une fonctionnalité de SQL Express qui permet à un utilisateur très non privilégié d'héberger une instance de base de données dans son propre contexte utilisateur.

Notez que cette base de données Northwind est stockée dans un fichier *.mdf dans le dossier App_Data (sous le répertoire racine de l'application « Live Demos ») avec le *.ldf (fichier journal).J'ai déjà essayé de joindre les fichiers *.mdf en tant que bases de données réelles dans le dossier "Bases de données" (dans l'arborescence de l'explorateur d'objets SSMSE), mais je les ai ensuite supprimés.

Le dossier racine de l'application Web « Live Demos » (et les dossiers/fichiers imbriqués) ont les utilisateurs suivants attribués avec TOUS les privilèges :
- IIS APPPOOL elerik ("Telerik" est le nom de mon pool d'applications dans IIS 7 pour ce site)
- IUSR
- SERVICE RÉSEAU

Prendre note de cette requête de base de données principale SQLExpress :

SELECT * FROM sys.dm_os_child_instances

J'ai également essayé différentes combinaisons d'autorisations *.mdf et *.ldf tout en modifiant également l'utilisateur sur le service SQL Server (SQLExpress) Windows 7 (Panneau de configuration > Outils d'administration > Services) ..et a également redémarré le service après avoir apporté ces modifications.

enter image description here

Reproduire:

téléchargez les contrôles Telerik Rad pour ASP.NET AJAX.Définissez les autorisations que j'ai mentionnées dans le dossier "Live Demos" sous Program Files elerik, changez la version .NET de l'application Web en .NET 3.5, remplacez leur fichier web.config 3.5 par le fichier web.config normal dans ce dossier. .Vous devez utiliser Visual Studio 2010, mais je l'exécute dans Visual Studio 2008 (avec un petit travail fastidieux que j'ai fait car notre entreprise n'est pas encore sur VS2010).Basculez également les assemblys Bin35 appropriés dans le dossier Bin du dossier "Live Demos".Compilez la solution.Créez un site Web IIS 7.Ajoutez l'authentification Windows.Activation de l'authentification anonyme et Windows.tous les autres sont handicapés.Définissez le pool d'applications pour utiliser Classic et 32 ​​bits.

Accédez ensuite à cette URL et cliquez sur l'image "Premier aperçu".

http://localhost/combobox/examples/overview/defaultcs.aspx

====================

Des preuves supplémentaires seront fournies sur demande.

Était-ce utile?

La solution

Vous utilisez une chaîne de connexion avec une authentification fiable = true.Cela signifie que la connexion utilise le contexte de sécurité du processus appelant.

Lorsque vous exécutez avec le serveur de développement, vous exécutez dans le contexte de sécurité de l'utilisateur connecté, donc tout fonctionne correctement.

Lorsque vous exécutez IIS, vous vous trouvez dans le contexte de sécurité du processus du pool d'applications, qui est le SERVICE RÉSEAU, qui n'a pas de profil utilisateur, il plante donc.

Vous pouvez le réparer soit :

  • Changer l'identité du pool d'applications en un utilisateur normal ayant accès à la base de données
  • Utilisez une chaîne de connexion avec le nom d'utilisateur et le mot de passe

Autres conseils

IIS ne charge pas le profil utilisateur Windows, mais certaines applications peuvent quand même en profiter pour stocker des données temporaires.SQL Express est un exemple d'application qui fait cela.Cependant, un profil utilisateur doit être créé pour stocker les données temporaires dans le répertoire du profil ou dans la ruche du registre.Le profil utilisateur du compte Network Service a été créé par le système et était toujours disponible.Cependant, avec le passage à des identités de pool d’applications uniques, aucun profil utilisateur n’est créé par le système.Seuls les pools d'applications standard (DefaultAppPool et Classic .NET AppPool) ont des profils utilisateur sur le disque.Aucun profil utilisateur n'est créé si l'administrateur crée un nouveau pool d'applications.

Toutefois, si vous le souhaitez, vous pouvez configurer les pools d'applications IIS pour charger le profil utilisateur en définissant l'attribut LoadUserProfile sur « true ».

https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

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