Impossible d'acceder à une BDD sur un serveur
Bonjour,
j'ai un site en ASP.NET ou j'utilise une identification pour les utilisateurs.
Pour cela, j'ai une BDD en .MDF qui a ete automatiquement créée dans le dossier App_Data (lui meme à la racine du projet).
En local, je n'ai aucuns pb, mon identification fonctionne tres bien.
Mais une fois mon site copié sur le serveur, j'ai un message d'erreur lorsque j'essaye de m'identifier :
Une erreur s'est produite lors de l'établissement d'une connexion au serveur. Lors de la connexion à SQL Server 2005, cet échec peut être dû au fait que les paramètres par défaut de SQL Server n'autorisent pas les connexions à distance. (provider: Interfaces réseau SQL, error: 26 - Erreur lors de la localisation du serveur/de l'instance spécifiés)
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.Data.SqlClient.SqlException: Une erreur s'est produite lors de l'établissement d'une connexion au serveur. Lors de la connexion à SQL Server 2005, cet échec peut être dû au fait que les paramètres par défaut de SQL Server n'autorisent pas les connexions à distance. (provider: Interfaces réseau SQL, error: 26 - Erreur lors de la localisation du serveur/de l'instance spécifiés)
Erreur source:
Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.
J'ai essayé de voir sur des forums, peut etre ca viendrait des droits, mais dans tout les cas je ne sais comment faire.
Donc merci d'avance à ceux qui sauront m'aider.
2 pièce(s) jointe(s)
Sécurité quand tu nous tient
Je ne suis pas certains que les éléments que je vais apporté vont répondre à votre question. Mais il faut vous assurer des points suivants avant d'aller plus loin.
Lorsque l'on déploie son site sur un serveur, donc dans IIS, il y a quelques petites choses à comprendre au niveau sécurité (surtout si la sécurité par défaut du serveur a été modifiée par l'administrateur) :
Droits sous IIS
Quand un navigateur se présente à IIS et demande une page, IIS utilise le compte IUSR_<Nom de la machine> (c'est le compte par défaut mais cela peut avoir été modifié) comme identité. Ainsi, tout se passe comme si le navigateur s'était logué en tant que IUSR_<Nom de la machine> (D'autres comptes sont utilisés par IIS, ces comptes sont différents si ont utilise IIS5 ou IIS6). Ainsi, si dans le code on essai d'accéder à un répertoire qui ne possède pas les droits pour IUSR_ cela ne fonctionne pas.
Oui mais, attention, Internet Explorer possède une capacité particulière. Celle de véhiculer l'authentification NT. Ainsi, si vous êtes en session administrateur sur un serveur, que depuis ce serveur vous appelez une page de votre site, IE véhicule votre session administrateur jusqu'à IIS qui de ce fait n'utilise pas IUSR_ mais la session administrateur. Donc, tout va fonctionner. C'est idem quand on est dans un domaine. L'utilisateur qui se connecte n'est plus forcément véhiculé en IUSR_ mais sous sa propre session. Bref, cela peut vite poser des problèmes, même si dans certains cas cela peut s'avérer utile. Je conseil donc de décocher l'option authentification windows intégrée (voir la pièce jointe CAP01). Ainsi, vous êtes certain que vous êtes véhiculé IUSR_, c'est au moins une première chose de faite.
Ensuite, il faut que IUSR_ ait les droits sur toute la chaîne technologique utilisée par votre application (répertoires, mais aussi parfois base de données, base de registre, réseau, ...). Et là cela peut se compliquer.
Ainsi, dans votre cas, il faudrait vérifier si vous utilisez une version Serveur ou une version Express de SQL Serveur. Généralement, avec une version Express, cela ne devrait pas poser de problème si vous accédez à des données dans App_Data.
Mais comme le signale votre message d'erreur, la connexion distante peut être désactivée. C'est à dire que le serveur est capable de voir si un service réseau a été utilisé pour accéder à la base et donc le refuser (Avant de perdre du temps à chercher voyez si le fait de décocher Authentification Windows Intégré comme suggéré plus haut ne solutionne pas le problème).
D'autres facteurs peuvent intervenir. Si vous vous connectez à votre base avec l'authentification NT (cette foi ci ce n'est plus l'authentification NT entre le navigateur et IIS, mais entre IIS et la base de données), c'est IUSR_ qui sera véhiculé (si vous avez procédé à la modif décrite ci-dessus). Il faut que ce compte ait les droits d'accès à la base. Si vous avez décoché cette cette option et entré un login/password, il faut que ce login/password ait les droits sur la base (voir la pièce jointe CAP02).
Dans certains cas, d'autres droits sont impliqués. Si par exemple vous avez mis votre site web sur un autre disque (ie. pas dans c:\inetpub\wwwroot), ont oubli souvent que les services (IIS/SQL Serveur) ont aussi besoin d'accéder à ces répertoires.
Bref, cela peut très rapidement devenir complexe.
Il serait utile que vous nous signaliez votre config exacte et surtout tout ce qui a été modifié par rapport à une config par défaut. Merci