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

JDBC Java Discussion :

Gestion utilisateur


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut Gestion utilisateur
    Bonjour,

    Je développe un application qui se connecte à une base de donnée sql via le pattern DAO.
    La question que je me pose est comment je peux faire pour que sur une même table SQL je puisse avoir plusieurs utilisateurs qui puisse ajouter ou supprimer une ligne (donnée) dans cette table.

    Sachant que chaque utilisateur ne doit voir et modifier que ses propres données, il doit aussi pouvoir visualiser les données administrateur sans pouvoir les modifier.

    L'administrateur lui peut voir et modifier toutes les données de la table

    Ma première solution serai d'ajouter une colonne 'user' relier à un id utilisateur dans la table et de faire une recherche par utilisateur

    Ma deuxième solution serai de créer une table par utilisateur mais j'ai peur que cela ne me crée beaucoup de table (beaucoup d'utilisateur)

    Quelle serait la bonne méthode ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Sachant que chaque utilisateur ne doit voir et modifier que ses propres données, il doit aussi pouvoir visualiser les données administrateur sans pouvoir les modifier.
    Est-ce que tu pourrais nous montrer la structure de la table en question ? Je ne comprends pas bien ce que tu entends par "données administrateurs", "propres données", etc... Une petite explication fonctionnelle nous aiderait à te fournir une réponse pertinente.

    Combien comptes-tu avoir d'enregistrement dans cette table ?

    Quelque soit ta réponse la solution de créer une table par utilisateur est assez exotique à mon goût et à écarter surtout si tu utilises le pattern DAO...

    Romain.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 96
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    La première solution me semble plus simple à implémenté donc je partirais sur celle-ci.

    Après ça, si tu as des problèmes de perf car tu as beaucoup d'enregistrements dans ta table alors la deuxième solution peut être envisagée. Mais, pour un utilisateur lambda tu vas devoir lire 2 tables : celle de l'utilisateur et celle de l'administrateur. Et pour l'administrateur tu vas devoir lire toutes les tables.
    Au final je ne suis pas sûr que tu gagnes grand chose voir tu vas avoir des perfs encore pires.


    S. Combes

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci de vos réponses

    Je pense que je vais utiliser la colonne user qui me semble être la meilleur solution

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Je reviens car mon problème est toujours le même mais avec des contraintes en plus

    Mon premier problème est que si je filtre sur la colonne USER via mon programme java l'utilisateur visualisera bien ses donnée et celle de l'admin sans voir celle des autres. Mais si l'utilisateur se connecte directement sur le server SQL il pourra voir et modifier toutes les données de la table... ce que je ne veux pas

    Pour ce point je pense utiliser des procédure stockés et verrouiller tous les accès direct aux tables. L'utilisateur ne pourra donc exécuter que les procédures stockés.

    Mon deuxième problème consiste a ajouter une notion de groupe c'est a dire qu'un utilisateur peut partager certaines données à un ou plusieurs utilisateurs en lecture et écriture donc la colonne USER ne convient plus puisque je ne peux mettre qu'un seul USER.


    Aurez vous une idée?

  6. #6
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Si on pouvait avoir une explication fonctionnelle de ce que tu veux faire, ce serait plus facile.

    Sinon pour ton premier point, l'utilisateur ne doit pas pouvoir accéder à ta base de données directement en dehors de ton programme. C'est pour cela que l'on a inventé les logins et mots de passe.

    Pour ton second point, la notion de groupe est effectivement appropriée.

    Bonne chance!
    Mes logiciels n’ont jamais de bug. Ils développent juste certaines fonctions aléatoires.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci de ta réponse,

    Je vais faire une exemple simple avec une seule table pour être plus clair:

    J'ai une table dans ma base de donnée nommé T_ORDINATEUR:

    ID---------N°SERIE-------USER_NAME
    0----------1--------------Admin
    1----------12-------------Jean
    2----------44-------------Sebastien

    Dans ma base de donnée j'ai un Administrateur Admin et deux Utilisateur Jean et Sébastien
    Tous les utilisateurs agissent dans la même table
    Dans mon programme:
    Admin peut voir et modifier les données de Jean et Sébastien de la table T_ORDINATEUR
    Sébastien peut voir les données Admin mais ne peut pas les modifier
    Sébastien ne peut pas voir les données de Jean
    Idem pour Jean avec Sébastien
    Une autre possibilité serai que Jean partage un ordinateur avec Sébastien il serai donc visible et modifiable par Sébastien et Jean (je ne sais pas encore comment faire)
    Admin peut ajouter des Utilisateurs
    Admin peut migrer les données de Jean et Sébastien en Admin pour qu'elles soit visible par tous
    Les utilisateurs sont crées dans SQL Server


    Mes utilisateur sont crées dans SQL server , se connectent via mon programme java qui envoie une requête de connexion à SQL server. Je ne pensai pas gérer les utilisateurs dans mon programme mais plutôt utiliser SQL Server.

    C'est pour ça que je dit que si l'utilisateur utilise un logiciel du type SQL server Management il peut se connecter à ma base de donnée et modifier les tables si je n'ai pas géré ses privilèges.

    Comme plusieurs utilisateurs agissent sur la même table de donnée mais qu'ils ne doivent pas voir ou modifier les données des autres utilisateurs je ne leurs autorisent aucune action direct sur les tables (INSERT,DELETE,SELECT...) j'ai crée des procédures stocké pour cela

    Ces procédures récupèrent le nom de l'utilisateur avec la commande

    Et remplis la colonne USER_NAME de la table lors d'une insertion "insert" ou d'un "update"
    Filtre sur le colonne USER_NAME lors d'une recherche "find" et d'une suppression "delete"

    J’espère avoir été plus clair,

    Merci par avance

  8. #8
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Je comprends mieux ton approche. Je te la déconseille. Tu déportes la logique côté base de données, c'est pas très bon.
    L'approche conséillée en Java Web, est de mettre la logique dans ta couche métier.

    Mon approche serait d'utilisé un framework genre Spring Security qui te permet de donner des Rôles. Tu peux stocker les utilisateur et les rôles en base de données. A partir de là, tu peux écrire ta logique côté serveur en fonction des rôles.

    A ce moment-mà, tu n'as besoin qu'un d'un utilisateur technique pour te connecter à la base de données. Et à moins que tu le donnes à tes utilisateurs, ils ne sauraont pas se connecter à ta base de données.
    Mes logiciels n’ont jamais de bug. Ils développent juste certaines fonctions aléatoires.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il faut voir comment est prévue l'application. Si elle doit tourner sur un serveur (java web), à ce moment, un seul utilisateur unique au niveau SQL et gérer les droits d'accès par le code.

    Si c'est une application desktop qui se connecte directement au serveur SQL, à ce moment là, effectivement, tu dois jouer avec ce que te fournis SQL server, et ça n'a plus rien à voir avec JAVA.

    Je ne suis pas d'accord avec ruscov, même si ça nécessite un grande maitrise de SQL server pour y arriver, les bases de données on toujours été concues par le passé pour permettre ce genre de chose. Je rappelle qu'à l'origine, c'était la base de donnée qui gérait la logique buisness, les client ne faisant que l'affichage. La tendance par la suite a été de mettre la logique buisness dans le programme, mais ça a eu pour conséquence d'alourdir le travail des bases de données (beaucoup de transition de donnée inutiles) et de nécessite des couches supplémentaires dans les applications. Mais, j'en conviens, pour quelqu'un qui ne maitrise pas SQL, c'est plus facile de tout faire en code.

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    J'ai oublié de préciser c'est un programme java avec swing. Ce n'est donc pas une application sur Serveur mais desktop , elle se connecte à un serveur SQL pour récupérer les données.

    Quelle serait donc la meilleur approche:
    -utiliser SQL server
    -utiliser un framework: Spring Security (que je n'ai jamais utilisé)?

    Si je dois utiliser SQL server ma façon de faire est elle la bonne?

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si c'est une application client swing et qu'il n'y a pas de server, au delà du serveur de DB, alors oui, selon moi, la seule possibilité, c'est de jouer avec ce que fournis SQL server comme drois d'accès et autre. Spring security ne servira à rien, puisque tout code java ne servirais que pour l'application et serait inactive si l'utilisateur utilise directement un client sql.

    Pour les réponse détaillées sur la manière de faire avec SQL server, faudrait poser la question sur les forums ad-hoc, ici on fait du java

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    tchize_,

    Je ne comprends pas bien ta position sur le fait que ça soit une application Desktop. C'est pas parce que c'est une application Desktop qu'il est obligé de donner le mot de passe de son serveur SQL à ses utilisateurs.

    Est-ce que c'est parce que tu penses que ses utilisateurs pourraient sniffer les packets pour trouver le user/mot de passe ?

    Romain.

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si l'application se connecte au serveur SQL, ça veux dire que soit le mot de passe du serveur SQL est livré avec l'application (donc récupérable), soit c'est à l'utilisateur de le tapper, donc encore une fois récupéré. Une application desktop a besoin de se connecter au server du coup l'utilisateur a accès à ces informations. Pas besoin de sniffer pour ça.

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    De toutes façons, il n'y a pas photo.
    Comme il faut filtrer les enregistrements en fonction des utilisateurs, il faut le faire faire par SQL Server :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM T_ORDINATEUR WHERE USER_NAME = 'Jean'
    C'est la seule façon d'avoir des résultats convenables.

    La requête peut être écrite dans la base SQL Serveur dans une procédure stockée
    ou encore elle peut être écrite à la volée dans java (avec un PreparedStatement)
    Mais dans tous les cas cela reste du langage SQL.

    Perso, dans un cas comme celui-là, je crée une table utilisateurs avec une codification pour identifier leurs droits
    Je n'essaye pas de créer un utilisateur de base de données avec des droits sur la base
    car ces droits concernent la possibilité d'agir sur des tables entières
    alors que là, ils ne doivent travailler qu'avec leurs données personnelles

    Enfin, il ne faut pas faire une table par utilisateur car dans ce cas aucune statistique ou autre traitement global ne sera possible !
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tout à fait d'accord, la difficulté ici, c'est d'interdire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM T_ORDINATEUR WHERE USER_NAME = 'Rodolphe'
    dans le serveur

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    Oui, avec une table utilisateurs contenant son id / mdp et ses droits on règle le problème
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Oui, avec une table utilisateurs contenant son id / mdp et ses droits on règle le problème
    Je t'avoue personellement que je travaille depuis des années en oracle, et je serais incapable de but en blanc de faire ça d'un claquement de doigts ^^. J'ignore comment mettre des droits lignes par lignes dans oracle, bien que je me doute que c'est faisable, d'où ma réflexion de plutot s'adresser au sous forums sql server

  18. #18
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    Je ne pensais pas à une solution spécifique SQL Serveur.

    Dans le cas décrit ici, j'utiliserai une table utilisateurs avec :
    - Login
    - MotDePasse
    - Niveau (Administrateur, Utilisateur)

    Lors de la connexion de l'application à la base de données,
    la personne s'identifie et son niveau est connu.
    Après, chaque requête sera construite en fonction de son niveau.

    Naturellement, la chaîne de connexion à la base reste cachée.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si l'application se connecte au serveur SQL, ça veux dire que soit le mot de passe du serveur SQL est livré avec l'application (donc récupérable), soit c'est à l'utilisateur de le tapper, donc encore une fois récupéré. Une application desktop a besoin de se connecter au server du coup l'utilisateur a accès à ces informations. Pas besoin de sniffer pour ça.
    Oui le user/password doit être livré avec l’application. Par contre pas forcé qu'il soit en clair. Il peut très bien être encodé, et qu'il y ait une fonction de décodage dans le code Java. Est-ce suffisamment sécurisé ? C'est à lui de voir. Il y aura surement moyen de faire du reverse engineering sur le code d'obtenir le code qui correspond à la fonction de décodage, et réussir à trouver le mot de passe de la base de données... Enfin c'est quand même pas à la porté de n'importe qui.

    Donc tout dépend à qui s'adresse l'appli et quels sont les risques si quelqu'un trouve le password. Quels sont les possibilités de détection d'un fraudeur ? Quels sont les moyens de retour en arrière ? ...

    Romain.

  20. #20
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Si tu l'encode en SHA par exemple, et que tu passes par dessus avec un SALT, je défie tes users de trouver le mot de passe

    Je persiste à dire qu'il sera plus propre de gérer cette logique que tu veux implémenter au niveau de ton appli java plutôt qu'au niveau de la base de données.

    Pense à ceux qui doivent maintenir ça après
    Mes logiciels n’ont jamais de bug. Ils développent juste certaines fonctions aléatoires.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Recherche cms pour gestion utilisateurs
    Par Invité dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 29/04/2008, 19h22
  2. [MDW][ADO][ACCESS 2002] Gestion utilisateurs
    Par Frank dans le forum Sécurité
    Réponses: 7
    Dernier message: 04/09/2007, 18h48
  3. gestion utilisateur sécurité
    Par liloo31 dans le forum Sécurité
    Réponses: 7
    Dernier message: 19/02/2007, 19h47
  4. Replica et gestion utilisateurs
    Par odelayen dans le forum Access
    Réponses: 4
    Dernier message: 09/06/2006, 14h53
  5. Gestion utilisateurs avec droits
    Par dr_look dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/04/2005, 17h03

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