Bonjours,
Je suis en train de créer un logiciel auquel plusieurs utilisateurs pourront ce connecter. Chaque utilisateur possède des droits d'un groupe, pour faire la différence entre les utilisateurs qui auront les droits ou pas de modifier les données. Pour faciliter l'administration de ces utilisateurs j'ai créé une interface de gestion d'utilisateur, qui ne peut s'ouvrir que lorsque l'admin ce connecte. Grâce à cette interface il peut créer, modifier et supprimer les utilisateurs.
Mais quand je veut me connecter à ma base de donnée avec un utilisateur créé par l'administrateur par le biais de l'interface, la connexion est refusé. Pourtant l'utilisateur est belle et bien créé, car en vérifiant dans la liste des utilisateurs du logiciel SQL Manager Lite for Postgre, l'utilisateur y est affiché. Il possède bien des droits de se connecter à la base, et il a un mot de passe.
Or ce qui est bizarre, c'est que lorsque je modifie le mot de passe de l'utilisateur avec le logiciel SQL manager, la connexion à la base de donnée s'effectue correctement avec mon logiciel.
J'ai testé quelques solutions :
- J'ai changer l'encryption du mot de passe, qui était en md5, en encryption Postgre.
- J'ai rajouté une requête qui modifie le mot de passe juste après celle qui créer l'utilisateur.
- J'ai vérifier le fichier pg_hba qui possède ces infos :
# IPv4 local connections:
host all all 127.0.0.1/32 password
Mais aucune de ces solutions n'a marché.
Voici le code qui créer mes utilisateurs :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
try {
//Chargement du driver
Class.forName("org.postgresql.Driver");
System.out.println("Driver OK!");
String url = "jdbc:postgresql://localhost:5432/db_users";
String user = "admin";
String passwd = "mpadmin";
//Connexion à la base de donnée avec l'utilisateur admin
conn = DriverManager.getConnection(url, user, passwd);
System.out.println("Connection effective !");
//Création du statement
state = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
//Execution de la requête qui créer l'utilisateur
state.execute("CREATE ROLE \"" + jtfPseudo.getText() + "\" LOGIN PASSWORD '" + strMotdepasse + "' NOCREATEDB NOCREATEUSER;");
}catch (Exception e1){
e1.printStackTrace();
} |
Donc je pense qu'il n'y a pas d'erreurs dans la création d'utilisateur puisque aucunes erreurs n'est affichées, et que l'utilisateur est affiché dans la liste des utilisateurs de SQL Manager.
Voici le code qui permet de ce connecter à la base :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
try{
Class.forName("org.postgresql.Driver");
System.out.println("Driver OK!");
String url = "jdbc:postgresql://localhost:5432/db_test";
String user = login.getText();
String passwd = String.valueOf(password.getPassword());
Connection conn = DriverManager.getConnection(url, user, passwd);
conn.setAutoCommit(false);
System.out.println("Connection effective !");
state = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
}catch (Exception e1) {
e1.printStackTrace();
} |
Bon là par contre il me lève une exception qui est la suivante :
1 2 3 4 5 6
|
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "erouan"
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:275)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:94)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init> |
Mais quand je modifie le mot de passe sur SQL Manager, la connexion s'effectue.
Donc voila je n'ai pas trouvé d'autre solution pour régler ce problème. Je pense que c'est surement un problème d'encryptage, mais je ne vois pas du tout comment régler ça, à par modifier le fichier pg_hda et mettre une méthode d'authentification "trust". Mais là on oublie la sécurité.
Si vous voulez plus de précision n'hésitez à demander et merci d'avance pour vos réponses .
Partager