IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[VS2003] Connexion distante à SQL Server 2000


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut [VS2003] Connexion distante à SQL Server 2000
    Bonjour,

    Bien qu'il y ait pas mal de posts sur ce sujet, je n'ai pas réussi à résoudre mon problème.

    Contexte :
    - Application ASP.NET (C#) qui doit se connecter à une base SQL Server 2000 distante. J'ai une page Web classique de connexion login + password avec un bouton connexion.
    - Mode d'authentification : Windows.
    - IIS : j'ai décoché l'accès anonyme et juste cocher l'authentification Windows intégrée.
    - Mon compte Windows est bien crée dans ma BD SQL Server et dispose des droits adéquats, tout comme l'utilisateur ASPNET.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /// <summary>
    /// Initialisation de la chaîne de connexion.
    /// </summary>
    /// <param name="p_login">Login de l'utilisateur.</param>
    /// <param name="p_password">Mot de passe de l'utilisateur.</param>
    private static void initializeConnectionString(string p_login,string p_password)
    {
      connectionString += "Server=nom_du_serveur";
      connectionString += ";Database=nom_de_la_BD";
      connectionString += ";User Id="+p_login;
      connectionString += ";Password="+p_password;
      connectionString += ";Integrated Security=SSPI";
    }
    
    /// <summary>
    /// Vérifie que l'utilisateur est valide.
    /// </summary>
    /// <param name="p_login">Login de l'utilisateur.</param>
    /// <param name="p_password">Mot de passe de l'utilisateur.</param>
    /// <returns>true si l'utilisateur est valide ; false sinon.</returns>
    public static bool userAuthenticate(string p_login,string p_password)
    {
      initializeConnectionString(p_login,p_password);
    
      try
      {
          SqlConnection oConnection=new SqlConnection(connectionString);
          oConnection.Open();
          oConnection.Close();
    
          return true;
      }
      catch(Exception e)
      {
          return false;
      }
    }
    
    /// <summary>
    /// Lorsque l'utilisateur clique sur le bouton "Connexion".
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button_Connexion_Click(object sender, System.EventArgs e)
    {
      //Si l'utilisateur est correctement authentifié, on lui crée une session.
      if(userAuthenticate(this.TextBox_Login.Text,this.TextBox_Password.Text))
      {
          //Code de création de session, renvoi sur la page de démarrage, etc.
      }
    }
    En mode debug, quand je passe sur oConnection.Open() le navigateur "réfléchit" pendant 15-20 secondes (la barre bleue en bas du navigateur défile lentement) puis j'obtiens l'exception {"SQL Server n'existe pas ou l'accès est refusé."}

    Du coup, je sèche un peu pour savoir d'où vient le problème. (et le DNS fonctionne correctement, j'ai fait un ping sur le nom du serveur, j'obtiens bien son IP et les 4 paquets de réponse de base).

    Donc si une âme charitable voit où j'ai manqué le tournant, ça serait fort aimable à elle de me re-aiguiller sur le bon chemin.

    D'avance merci.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      connectionString += "Server=nom_du_serveur";
      connectionString += ";Database=nom_de_la_BD";
    T'as bien remplacé nom_du_serveur et nom_de_la_DB par leur valeur au moins?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    T'as bien remplacé nom_du_serveur et nom_de_la_DB par leur valeur au moins?
    Oui oui, ça m'arrive de faire des erreurs excessivement stupides comme celles-là, j'ai juste caché les noms ici

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Essaye de te connecter à ta DB avec VS.
    Il va te créer la chaine de connexion

  5. #5
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Si tu te connectes en Intergrated security tu ne dois pas fournir de username et password dans ta connection string.

    Connection string : "datasource=[Nom du serveur]; initial catalog=["Nom de la db];Integrated Security=True"

    Ludovic,

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Tout à fait, mais le problème c'est que je me connecte en Integrated Security=true sans password, ou en false avec user id + password, j'ai toujours la même erreur. Enfin, merci tout de même de cette précision.

    Sinon j'ai testé la récupération de connectionString via VS directement. Donc là, ma connexion fonctionne, je récupère la connectionString et je la copie-colle dans mon objet Connection (en enlevant les paramètres qui renvoient une exception du type : paramètre non valide dans la chaîne de connexion) et j'ai toujours le même souci. Donc du coup, je vois vraiment pas où est-ce que ça pêche. C'est désespérant, surtout qu'il doit s'agir d'une erreur toute bête à tous les coups.

    Si j'arrive à debuger ça, je le ferais savoir.

  7. #7
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Peux tu poster la chaine de connection que tu utilises maintenant ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string connectionString = "Data source=nom_serveur;Initial Catalog=nom_BD;Integrated Security=true";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string connectionString = "Data source=nom_serveur;Initial Catalog=nom_BD;Integrated Security=SSPI";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string connectionString = "Data source=nom_serveur;Initial Catalog=nom_BD;Integrated Security=false;User Id="+p_login+";Password="+p_password;
    J'ai testé les 3 et aucune ne marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SqlConnection oConnection=new SqlConnection(connectionString);
    oConnection.Open();
    oConnection.Close();

  9. #9
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Passes en debug et récupères ta chaine de connexion juste avant d'ouvrir la connexion pour voir

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Pour le cas : Intergrated Security=true ou SSPI, j'ai rien de plus dans la chaîne (je devrais pas avoir le user=... qui se greffe automatiquement ?)

    Pour le cas : Integrated Security=false, idem je retourne bien le login et le password que je saisis dans mes TextBox. Par contre, dans ce cas là, il faudrait pas que je change le mode d'authentification dans IIS ?

    De plus, est-ce que j'aurais pas quelque chose à rajouter dans mon fichier Web.config ?

  11. #11
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Dans le cas integrated security le username n'apparait pas c'est normal.

    Peux tu poster le message exact de l'exception envoyé ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    e.Message ==> "SQL Server n'existe pas ou l'accès est refusé."
    e.Source ==> ".Net SqlClient Data Provider"
    e.StackTrace ==> at System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction)\r\n   at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)\r\n   at System.Data.SqlClient.SqlConnection.Open()\r\n
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    e>[System.Data.SqlClient.SqlException]
     Class 20
     Message "SQL Server n'existe pas ou l'accès est refusé."
     Number 17
     Procedure "ConnectionOpen (Connect())."
     Source ".Net SqlClient Data Provider"

  13. #13
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Es tu complétement sur du nom du serveur ?
    As tu essayer avec son IP ?
    Y a t il des erreurs dans l'event viewer du serveur ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Pour les deux premiers oui, j'avais déjà testé avec l'ip du serveur, mais ça change rien malheureusement.

    Sinon pour l'event viewer, je sais pas comment on peut le voir dans VS S'il faut passer direct par le serveur, j'ai pas les droits d'admin. Sur ma base j'ai juste les rôles db_owner et public.

  15. #15
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Si tu n'as pas de droits sur le serveur tu ne pourras pas consulter les event log. Dommage cela aurait pu donner plus d'infos sur le problème.

    Je suis sur a 99.9% que le problème ne vient pas de toi mais de la sécurité ?

    Est ce que un administrateur peut te donner l'erreur loggé dans l'event viewer du serveur ?

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Il va falloir que je vois s'il est pas parti en vacances, ce qui serait assez embêtant pour trouver l'erreur rapidement. Enfin, en tout cas, merci pour votre patience et vos réponses, je finirais bien par trouver de toute façon, dans ce cas je posterai le pourquoi de l'erreur.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Ca y est ça fonctionne. Il manquait cette ligne à rajouter dans le fichier web.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <system.web>
      <identity impersonate = "true" />
      ...
    </system.web>

  18. #18
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Oui donc ça signifie que la sécurité dans la db ne donnait pas accès au user qui utilisait l'application.

    Cette ligne signifie que maintenant l'accès à la db se fait avec le user ASPNET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauvegarde de la base a un serveur distant SQL SERVER 2000
    Par rezgui_fawzi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/11/2007, 13h50
  2. connexion base sql server 2000
    Par gdebre dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/04/2007, 12h12
  3. connexion BO, sql server 2000 ?
    Par donny dans le forum Deski
    Réponses: 1
    Dernier message: 01/03/2006, 11h42
  4. Connection Serveur Distant SQL Server 2000
    Par LeNeutrino dans le forum JBuilder
    Réponses: 2
    Dernier message: 16/11/2005, 10h45
  5. connexion à distance à SQL Server 2000 à partir d'Access2003
    Par FlicEnFlac dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/10/2005, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo