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

C++ Discussion :

Système d'accès à un fichier centralisé


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Système d'accès à un fichier centralisé
    Bonjour,

    Je créé actuellement un programme de gestion administrative pour une entreprise. J'ai fait, par exemple, une fenêtre avec wxWidgets pour afficher et éditer la liste des clients de l'entreprise. Lorsque cette fenêtre est fermée, la liste est enregistrée dans un fichier xml, sur l'ordinateur de l'utilisateur.

    Maintenant, pour que mon programme soit vraiment utile, il faudrait que ce fichier soit sur un serveur, pour que tout les utilisateurs voient et modifient le même fichier. Il me faut donc un système sécurisé et gérant des accès simultanés à un même fichier (par exemple, que se passe-t-il lorsqu'un utilisateur supprime un client qu'un autre utilisateur était en train de modifier ?). Mon problème est que je ne sais pas du tout comment faire ça.

    Mes pistes sont :

    - Mettre le fichier xml sur un serveur et y accéder via le protocole FTP depuis mon programme. Je ne sais pas s'il sera possible de gérer les accès simultanés de cette façon (ou de les empêcher en bloquant le fichier).

    - Créer un programme qui fonctionnera en permanence sur le serveur, et qui répondra au requêtes des programmes clients en résolvant les conflits. J'imagine que l'on ne peut pas faire ça avec n'importe qu'elle serveur.

    - Utiliser une bases de données et un systèmes de gestion de bases de données. Je ne connais pas du tout les bases de données et elles sont peut-être la solution évidente à mon problème. Si c'est le cas, pourriez-vous me donner une idée de la marche à suivre pour réaliser mon projet ?

    Je vais me renseigner à propos des bases de données, mais je suis un peu bloqué dans mes recherches, peut-être parce-que je ne sais pas nommé précisément ce que j'essaie de faire. Je pensais, en commençant ce projet, que le fait de centralisé un fichier auquel plusieurs programmes clients accèderont était assez banal aujourd'hui et que je trouverais facilement une librairie et une méthode "standardisée" pour le faire, mais je n'ai rien trouvé pour le moment.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Oui une base de données est la solution évidente à ce problème.
    MySQL est le premier nom qui me vient, mais il en existe plein d'autres.
    Quant à son utilisation, tu vas sur leur site, télécharges l'API et lis la doc. Il faudra apprendre le SQL, rien de difficile et très utile.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 068
    Points
    43 068
    Par défaut
    Ou éventuellement SQLite.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut, et bienvenue sur le forum
    Citation Envoyé par zualh Voir le message
    Maintenant, pour que mon programme soit vraiment utile, il faudrait que ce fichier soit sur un serveur, pour que tout les utilisateurs voient et modifient le même fichier.
    Ouuhhh... Ca, ca sent le problème de sécurité à plein nez.

    Il y a -- certes -- des gens qui doivent pouvoir accéder aux données, mais une chose est sure, c'est que ce n'est pas "tout le monde".

    D'ailleurs, dans l'idéal, il ne devrait y avoir que certains utilisateurs qui soient en mesure d'accéder (en lecture seule) à certaines informations, et d'autres utilisateurs qui ne pourront accéder (en lecture seule, toujours) qu'à d'autres données.

    Et, enfin, il devrait -- idéalement toujours -- y avoir encore moins de personnes susceptibles de modifier ces données que de personnes pouvant les voir

    Il me faut donc un système sécurisé et gérant des accès simultanés à un même fichier (par exemple, que se passe-t-il lorsqu'un utilisateur supprime un client qu'un autre utilisateur était en train de modifier ?). Mon problème est que je ne sais pas du tout comment faire ça.
    Ben, je vais pas répéter ce que les autres ont déjà dit
    - Mettre le fichier xml sur un serveur et y accéder via le protocole FTP depuis mon programme. Je ne sais pas s'il sera possible de gérer les accès simultanés de cette façon (ou de les empêcher en bloquant le fichier).
    Surtout pas... ce serait la catastrophe d'un point de vue sécuritaire
    - Créer un programme qui fonctionnera en permanence sur le serveur, et qui répondra au requêtes des programmes clients en résolvant les conflits. J'imagine que l'on ne peut pas faire ça avec n'importe qu'elle serveur.
    Ce qui reviendrait au final à recréer tout un SGBDR (Serveur de Gestion de Base de Données Relationnelle) et donc à la solution qui suit...

    C'est à dire, beaucoup de travail pour "pas grand chose", vu que tout est déjà disponible
    - Utiliser une bases de données et un systèmes de gestion de bases de données. Je ne connais pas du tout les bases de données et elles sont peut-être la solution évidente à mon problème. Si c'est le cas, pourriez-vous me donner une idée de la marche à suivre pour réaliser mon projet ?
    Je ne vais, encore une fois, pas répéter ce que les autres ont dit
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Citation Envoyé par chrtophe Voir le message
    Ou éventuellement SQLite.
    Selon ce que j'ai compris pas vraiment https://www.sqlite.org/whentouse.html en particulier :
    Situations Where A Client/Server RDBMS May Work Better

    Client/Server Applications

    If there are many client programs sending SQL to the same database over a network, then use a client/server database engine instead of SQLite. SQLite will work over a network filesystem, but because of the latency associated with most network filesystems, performance will not be great. Also, file locking logic is buggy in many network filesystem implementations (on both Unix and Windows). If file locking does not work correctly, two or more clients might try to modify the same part of the same database at the same time, resulting in corruption. Because this problem results from bugs in the underlying filesystem implementation, there is nothing SQLite can do to prevent it.

    A good rule of thumb is to avoid using SQLite in situations where the same database will be accessed directly (without an intervening application server) and simultaneously from many computers over a network.
    Cordialement

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 068
    Points
    43 068
    Par défaut
    Euh, oublies SQLIte, ça va pas être adapté pour un accès concurrentiel.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci à vous tous pour vos réponse.

    Depuis hier, j'ai suivi la recommandation de Bousk et ai lu un tutoriel sur MySQL. J'ai télécharger le "connecteur C" de MariaDB et son utilisation a finalement l'air très simple pour ce que je veux faire.

    Ce qui m'inquiète un peu maintenant c'est l'aspect sécurité, comme l'a relevé koala01. Mon programme donne un accès complet à la base de données à tous les utilisateurs, et je ne pense pas pouvoir changer ça car c'est un peux son objectif.

    Je n'ai pas encore vraiment étudié la question, mais j'ai cru comprendre qu'il était possible de créer plusieurs utilisateurs ayant accès à la base de données. Je compte créer les utilisateurs via phpMyAdmin, puis demander un identifiant et un mot de passe au démarrage de mon application. Je n'aurai alors qu'à transmettre ces informations au serveur (fonction mysql_real_connect qui, j'imagine, est elle-même sécurisée et crypte le mot de passe ?). Il me semble que je ne prend pas de risque d'introduire une faille de sécurité de cette manière, puisque je laisse le serveur s'occuper de la sécurité et que je ne stocke pas de mot de passe dans mon programme. Bien sur, chaque utilisateur ayant un mot de passe valide pourra décider d'effacer entièrement la base de données, mais je ne pense pas que ce soit à moi de régler ce problème.

    Edit: Je pourrais aussi créer une table dans la bdd contenant l'historique des actions effectués ainsi que le nom de l'utilisateur. Comme ça, on pourra au moins savoir qui c'est amusé à tout effacer. Un système permettant d'annuler les dernières actions serait encore mieux, mais ça me semble un peu long à implémenter.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Ceci n'est plus un problème de C++ mais un problème d'administration de base de données.
    Oui mettre en place et administrer une base de données est un job à part entière.
    Ce que tu veux faire n'a rien de neuf ou d'extraordinaire. C'est le fonctionnement des forums type phpBB depuis une quinzaine/vingtaine d'années. Et tous ceux qui ont copié et créé un équivalent depuis.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Accès aux fichiers protégés du système
    Par olivepao dans le forum Windows Vista
    Réponses: 5
    Dernier message: 25/09/2008, 00h36
  2. Réponses: 1
    Dernier message: 10/03/2008, 19h07
  3. Restreindre l'accès des fichiers..
    Par Neilos dans le forum Windows
    Réponses: 6
    Dernier message: 25/08/2004, 00h22
  4. [Tomcat]Droit d'accès aux fichiers créés par une servlet
    Par loulouleboss dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 15/07/2004, 14h32
  5. [Réseau] Autorisations d'accès aux fichiers
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 19/05/2004, 13h43

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