|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 257 ![]() |
Bonjour,
Je viens demander votre aide, car ce domaine n'est pas ma spécialité. J'ai participé à la conception d'un progiciel d'administration, qui s'occuppe de gérer les paramètres d'une base de données (insertion, suppression et modification de données). J'utilise Hibernate pour me connecter à ma base à partir de mon application, et un pool de connexion C3PO. J'aimerais en fait qu'une seule et unique personne puisse se connecter à ma base DB2 pour travailler dessus à partir de mon application. Mais je ne sais pas trop comment m'y prendre pour réaliser cette contrainte, peut-être en créant une nouvelle table avec un identifant de connectivité ? Est-ce que quelqu'un à une idée pour mettre en oeuvre ceci ? Merci pour votre aide.
__________________
"Tout m'afflige, et me nuit, et conspire à me nuire" Racine |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : août 2006 Messages : 56 ![]() |
Rien de plus simple!
Tu défini la personne qui doit accéder la DB comme utilisateur sur ton serveur DB2. Losrque c'est fait, tu ajoute cet utilisateur dans la liste des "USER" de DB2 sur la DB qu'il doit pouvoir accéder et tu lui donne le droit de "CONNECT". Ensuite pour chaque table de la db, tu lui donne les droits "SELECT", "INSERT", "UPDATE","DELETE" selon ton bon plaisir, ou suivant les besoins de ton application. Pour faire cela, tu dois évidement être au minimum DBADM sur cette DB. L'utilisateur devra bien évidement d'identifier dans ton application lors du "CONNECT" à la DB. |
|
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Inscription : mai 2006 Messages : 257 ![]() |
Merci pour ta réponse ALHER,
Je ne sais pas en fait si c'est le meilleur moyen pour réaliser ce que je souhaite. Je m'explique : dans mon application, j'ai le fichier de configuration Hibernate (hibernate.cfg.xml). A l'intérieur de celui ci, on définit les fichiers de mappings et la connexion à ma base de données (driver, user, password...). Soit : Code :
Pour limiter l'appli à une seule personne ce n'est pas génial. - Peut-être est-il possible de définir ces paramètres de manière dynamique (pas sûr). - Ou bien ajouter une nouvelle table qui définit un ID de connectivité et un booléen, et si ce dernier est à true, on rejette le nouvel utilisateur qui veux utiliser l'application. - Sinon on peut spécifier une authentification au projet, je crois que l'on peut faire cela avec LDAP (je ne connais pas du tout) - etc... Qu'est-ce que vous me conseillez de faire ? Pour que se soit le plus simple et efficace possible à réaliser Merci pour votre aide.
__________________
"Tout m'afflige, et me nuit, et conspire à me nuire" Racine |
||
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : août 2006 Messages : 56 ![]() |
Si myuser et mypassword sont rempli par le client , et qu'ils n'exitent pas sur le serveur DB2 en dans l'attribution des droits sur la DB et les tables, DB2 va retourner un code erreur lors de la tentative de connection qui n'aura pas lieu.
Si par contre, c'est bien l'utisateur defini dans les droits, alors l'application fonctionnera normalement. Il suffit donc de traquer le code errreur du connect. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 257 ![]() |
Merci pour ta réponse,
J'ai réfléchi un peu plus à ta solution et il y a quand même une faille. Supposons que l'on ai une combinaison unique User/Password qui puisse se connecter à l'application, pour effectuer les modifications sur la base. Cela n'empêchera pas à plusieurs utilisateurs de se connecter en même temps, avec la même combinaison User/Password (oui j'ai cherché la petite bête Donc ce n'est pas une solution sans faille, d'ailleur est-ce que ça existe ? ![]() Mais cette dernière est intéressante, à voir... Sinon pour l'instant j'essaye de regrouper différentes méthodes pour régler mon problème.Ceci me permettant de faire un comparatif entre elles et de voir quelle est la meilleure dans mon cas. Donc si d'autres personnes ont des idées, n'hésitez pas à la proposer Merci à vous.
__________________
"Tout m'afflige, et me nuit, et conspire à me nuire" Racine |
|
|
00
|
|
|
#6 | |
|
Membre du Club
![]() Inscription : août 2006 Messages : 56 ![]() |
Citation:
une Dans ce cas tu peux toujours créer une table avec une valeur "sémaphore" et forcer l'application a lire le contenu avant de faire autre chose et le mettre a jour si il est l'unique utlisateur. Evidement il faudra prévoir les cas de réinitialisation, de reset, etc... une autre Tu peux aussi t'arranger pour que les accès en update soit "Exclusif" et réserve toute la DB, il y a des clauses dans les ordres select pour cela si je me rappelle bien. Tant que la transaction n'est pas "Commit" ou "Rollback", la DB est bloquée. Tu joue alors avec les options de "Cursor Stability", mais tu risque de pourrir tes performances à cause des "deadlock". Le contrôle des pages est moins bien adapté sous Windows/linux que sur Z/os. Bonne réflection |
|
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 257 ![]() |
Merci pour ton aide ALHER
Je vais voir tout ça, en essayant d'opter pour quelque chose de performant et simple à mettre en oeuvre. Je vous dirais pour quel solution j'ai jetté mon dévolu. Mais si vous avez des propositions n'hésitez pas
__________________
"Tout m'afflige, et me nuit, et conspire à me nuire" Racine |
|
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Inscription : décembre 2004 Messages : 21 ![]() |
Bonjour je me pose une question ?
Avec hibernate et un pool de connexion, la connexion ou les connexions (si tu as autorisé plusieurs connexion à la base dans ton pool) n'est elle pas partagé par ton application? C'est a dire si 5 clients attaque un seul serveur d'application ils peuvent utilisé qu'une seule connexion de ton pool. Je vois pas trop comment sinon a part en system sur le réglage en aval du serveur d'application pour n'accepter qu'un seul client. Désolé Bonne réflexion |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 257 ![]() |
Effectivement oui, en ce qui concerne un pool de connexion, les connexions sont partagées entre tous les utilisateurs, même si tu n'as qu'une seule connexion dans ton pool, dès que ta requête est achevée, l'application appelante rend la connexion qui est disponible pour une autre personne
Par contre j'ai trouvé une solution intéressante en utilisant l'Id de connexion utilisateur qui est unique pour chaque personne qui se connecte à l'application. Plus d'infos quand j'aurais approfondis mes recherches
__________________
"Tout m'afflige, et me nuit, et conspire à me nuire" Racine |
|
|
00
|
|
|
#10 | ||
|
Membre habitué
![]() Inscription : mai 2006 Messages : 257 ![]() |
Bon alors, la méthode que j'ai trouvé est pas mal je trouve.
Principe : 1) On crait une table DBCONNEXION qui va nous servir à stocker l'ID session utilisateur (qui est unique) et la date de la dernière modification dans la base de données. 2) A l'initialisation de l'application, on récupère l'ID session utilisateur nouvellement créé et on le compare avec celui de la base de donnée. Si celui-ci est différent, on récupère la date de la derniere modification. Deux choix sont alors possible : Code :
B : date de la connexion du nouvel utilisateur C : temps avant la déconnexion automatique 3) On désactive les boutons de validation/suppression si l'ID de session utilisateur est différent de celui enregistré dans la base de données. 4) On met à jour la date dernière activité dans DBCONNEXION à chaque fois que l'on modifie la base. 5) Si l'utilisateur qui a les modifs souhaite quitter l'application, un bouton de déconnexion est à sa disposition. Ceci permet ainsi de libérer la connexion en modification. Ce qui permettra au prochain utilisateur qui se connectera, de pouvoir avoir la possibilité de faire des modifs. Voila, Si vous avez des remarques ou un avis n'hésitez pas
__________________
"Tout m'afflige, et me nuit, et conspire à me nuire" Racine |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com