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

Administration SQL Server Discussion :

Echec requête post client (User) [2012]


Sujet :

Administration SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Echec requête post client (User)
    Bonjour à tous,

    Je sollicite votre aide car cela fait déjà un bon moment que je cherche à résoudre un problème de connexion de mon application (vb.net) avec base de donnée SQL.

    Mon application et une API d'un logiciel professionnel, elle vient ècrire et lire la base SQL du logiciel source.
    Pour se faire lors de l'installation de l'application je crée un User avec droit écriture et lecture (db_datareader et db_datawriter) sur la base de donnée.

    Quand je lance l'application directement sur le post qui héberge la base je peux lire et écrire la base.

    Quand j’exécute l'application depuis un post client je peux uniquement lire la base de donnée. J'utilise pourtant le même utilisateur SQL. C'est la même application.
    Le logiciel source est capable de lire et écrire dans cette configuration serveur client.

    Est ce que quelqu’un aurait une piste ? sachant qu'il est compliqué pour moi de tester se problème car je n'ai pas de PC avec un windows serveur.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 985
    Points : 49 809
    Points
    49 809
    Billets dans le blog
    1
    Par défaut
    Vous pouvez installer la version Developper de SQL Server sur n'importe quel PC....

    Je soupçonne que la base doit utiliser des objets complémentaires tels que vue, déclencheurs, procédures....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    merci pour votre message je suis en trin de télécharger et d'installer SQL développer.

    Vous parlez de vue, procédures , déclencheurs mais comment je peux vérifier que cela soit un de ses truc qui bloc !!

    J'utilise la requête ci-aprés pour créer mon utilisateur. Est ce que cela vous semble logique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'TOTO')
    DROP USER [CVF]
     
    IF  EXISTS (SELECT * FROM sys.server_principals WHERE name = N'TOTO')
    DROP LOGIN [TOTO]
     
    CREATE LOGIN [TOTO] WITH PASSWORD='TOTO', DEFAULT_DATABASE=[CxMaterials_12], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
     
    use [CxMaterials_12]
    create user [TOTO] from login [TOTO]
    ALTER USER [TOTO] WITH DEFAULT_SCHEMA=[dbo]
     
    EXEC sp_addrolemember N'db_datawriter', N'TOTO'
    EXEC sp_addrolemember N'db_datareader', N'TOTO'

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 985
    Points : 49 809
    Points
    49 809
    Billets dans le blog
    1
    Par défaut
    Plus rapide :

    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
    DROP USER IF EXISTS [CVF];
     
    IF  EXISTS (SELECT * FROM sys.server_principals WHERE name = N'TOTO')
       DROP LOGIN [TOTO];
     
    CREATE LOGIN [TOTO] 
       WITH PASSWORD='TOTO', 
            DEFAULT_DATABASE=[CxMaterials_12], 
            DEFAULT_LANGUAGE=[us_english], 
            CHECK_EXPIRATION=OFF, 
            CHECK_POLICY=OFF;
     
    USE [CxMaterials_12];
     
    CREATE USER [TOTO] 
       FROM LOGIN [TOTO]
       WITH DEFAULT_SCHEMA=[dbo]; --> inutile, car par défaut....
    Personnallement je suis contre la fait de donner le même nom à un utilisateur SQL et un compte de connexion cela entraine de la confusion, et vous ne saurez plus ou vous en êtes....

    Je donnerais par exemple le nom CNX_TOTO pour le login et USR_TOTO pour l’utilisateur SQL

    Cela dit, ni votre login, ni votre user n'a de privilège.... Ils ne peuvent donc rien faire....

    Il faudrait au moins donner à votre utilisateur le privilège de lire toutes les tables de la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    USE [CxMaterials_12];
    GRANT SELECT ON DATABASE::[CxMaterials_12] TO USR_TOTO;
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    USE [CxMaterials_12];
    GRANT SELECT TO USR_TOTO; --> puisque vous êtes dans la base il n'y a pas d’ambiguïté
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    merci de ces infos

    Je me pose deux questions:
    En faite mon User Login "TOTO" fonctionne avec mon application, sauf dans le cas ou ma base est stocké sur un Serveur avec un Windows serveur.

    Quel est la différence entre faire un Grant Select insert et donné les droits db_datareade et db_datawrite au Login User

    A savoir que cette utilisateur à pour fonction d’être uniquement utilisé via une application VB.net

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 985
    Points : 49 809
    Points
    49 809
    Billets dans le blog
    1
    Par défaut
    GRANT permet de définir des privilèges fins. par exemple SELECT sur telle table, tel schéma, INSERT sur tel table, tel schéma, UPDATE sur telelle table, tel schéma...

    les rôles db_datareader et db_datawriter sont des collections de privilèges au niveau de la base :

    db_datareader = GRANT SELECT ON DATABASE::...

    db_datawriet = GRANT INSERT, UPDATE, DELETE ON DATABASE::...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Ok

    Donc donner les droits db_datareader et db_datawriter sur la base c'est pas trés propre, sécuritaire peut être mais cela fonctionne.

    Est ce qu'il y a d'autre paramètre qui rentre en ligne de compte pour autoriser l'axé au table sur serveur ?

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 985
    Points : 49 809
    Points
    49 809
    Billets dans le blog
    1
    Par défaut
    OUI ! Passer par des vues plutôt que des tables.....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Aprés quelques recherche si je comprend bien les vies ça fonctionne que avec du select. En tous cas moi je n'en vois aucune de créer par le soft principal.
    Nom : view.JPG
Affichages : 108
Taille : 30,8 Ko

    Et de plus toutes mes requête select fonctionne.
    Avec infrastructure serveur cela plante ici. Cette requête fonction si je l’exécute directement sur le serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT into [Material] ([ParentID],[Name],[Description],[MaterialTypeID],[UnitOfIssueID],[DefaultMaterialVendorID],[DefaultCost],[SellPrice],[DefaultMarkup],[SalesTax],[DefaultTaxRate],[Waste],[Estimate],[rGUID],[System],[Deleted],[LoadModel]) VALUES (0,@Mat_Name,@Mat_Description,@Mat_Type,@UnitOfIssueID,0,0.00,0.00,0,0,0,0,1,@rGUID,0,0,1)
            set @IDMat_Insert = Scope_identity()
           INSERT INTO [MaterialMenuTreeItem] ([MenuID],[MenuTreeID],[MaterialID]) values (1,@Dossier,@IDMat_Insert)
            Select * from [Material] where ID = @IDMat_Insert

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : janvier 2010
    Messages : 5 643
    Points : 13 070
    Points
    13 070
    Par défaut
    Bonjour,

    Concernant les vues, vous pouvez aussi faire des INSERT, UPDATE ou DELETE dessus.
    Si la vue est simple (ne référence qu'une seule table,...), SQL Server mettra à jour automatiquement la table sous jacente.
    Si la vue est plus compliquée, alors il faudra créer des triggers pour implémenter la logique de mise à jour.

    Pour en revenir à votre problème, il faudrait commencer par nous indiquer le message d'erreur que vous obtenez quand vous essayez de mettre à jour.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    bonjour,

    Le message d'erreur que je récupère et pas trés explicite. Nom : creation matériaux2.png
Affichages : 94
Taille : 90,1 Ko
    Dans un log que je n'ai plus sous la main j'arrive à lire "login fail for user TOTO"

    Je comptais sur la mise en place d'un serveur chez moi pour pouvoir faire plus de test, mais malheureusement cela fonction chez moi dans la situation ou chez trois clients cela plante.

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 985
    Points : 49 809
    Points
    49 809
    Billets dans le blog
    1
    Par défaut
    ça n'est pas une erreur SQL Server. Toutes les erreurs SQL Server sont gérées et ont un n° de référence.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  13. #13
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    J'ai mis un peux de temps mais j'ai enfin récupéré le retour de mon erreur qui est inscrit dans mon fichier de Log.

    ExecQuery Error: Login failed for user 'TOTO'. TOTO étant un User Sql que je crée moi même via les requête cité plus haut.

    Donc au vu des dernier message si ce n'est pas un problème de droit dans SQL cela doit être un par feu Windows. Avez vous des piste à m'indiquer?


    Merci d'avance

  14. #14
    Membre à l'essai
    Homme Profil pro
    Consultant technique
    Inscrit en
    août 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : août 2019
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Aprés plusieurs semaine de recherche le problème venait finalement de mon code vb.net.

    Je lançais une nouvelle connexion avant chaque requête mais dans certain cas ma chaîne de déclaration de connexion devenait vide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2016, 18h19
  2. Apache HTTP Client : Corps d'une requéte POST
    Par albert55 dans le forum Général Java
    Réponses: 3
    Dernier message: 12/07/2013, 17h43
  3. [WD15] Echec de la mise à jour en réseau sur le poste client
    Par mpesss dans le forum WinDev
    Réponses: 5
    Dernier message: 05/03/2012, 15h37
  4. Envoi d'une requête POST à partir d'un client telnet!
    Par mumu27 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 22/11/2009, 11h18
  5. [CR10][ASP.NET]Impression sur le poste Client
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/04/2004, 14h41

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