bonjour à tous,
j'ai une application qui se connecte à MySQL (version 5.0.28, driver 5.0.7) avec un user générique, disons "user_data".
Du coup, lorsque l'on a un ou plusieurs utilisateurs qui se connectent, on les voit apparâitre ainsi dans MySQL Administrator :
"user_data@[Machine].[adresse Web]" (user@host), par exemple : "user_data@MachineA01.mon-entreprise.fr"
(ou, en SQ : "select system_user();")
Or, pour des raisons de tracabilité, je voudrais que le champ "host" inclut, non le numéro de machine, mais le login ou identifiant de l'utilisateur, soit quelquechose comme ça :
"user_data@tintin.mon-entreprise.fr"
"user_data@dupond.mon-entreprise.fr"
"user_data@dupont.mon-entreprise.fr"
etc ...
Il semble possible, en tout cas sur d'autres bases de données, de forcer le champ "host", via le paramètre "localSocketAddress".
Mais aucun de ces deux codes ne fonctionne :
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 try{ Properties properties = new Properties(); properties.setProperty("user", "user_data"); // ok properties.setProperty("password", "user_date_pwd"); properties.setProperty("localSocketAddress", "tintin"); Connection conn2 = DriverManager.getConnection([urlBdd], properties); // ne marche pas System.out.println("Type Map of Connection : "+conn2.getTypeMap()); System.out.println("User = "+conn2.getMetaData().getUserName()); // equivalent MySQL : select system_user(); System.out.println("URL = "+conn2.getMetaData().getURL()); System.out.println("localSocketAddress (by properties) = "+properties.getProperty("localSocketAddress")); System.out.println("System Functions = "+conn2.getMetaData().getSystemFunctions()); //conn2.close(); }catch(Exception ex){ System.err.println("Erreur à la 2ème connection"); //ex.printStackTrace(); }Le genre d'erreur affiché est celui ci :
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
18 try{ Properties properties = new Properties(); properties.setProperty("user", "user_data"); // ok properties.setProperty("password", "user_date_pwd"); Connection conn3 = DriverManager.getConnection([urlBdd]+"?localSocketAddress=tintin", properties); // ne marche pas //Connection conn3 = DriverManager.getConnection([urlBdd]+"?localSocketAddress=\"tintin\"", properties); // se connecte a la base mais le "host" n'affiche pas ce que l'on desire ... System.out.println("Type Map of Connection : "+conn3.getTypeMap()); System.out.println("User = "+conn3.getMetaData().getUserName()); // equivalent MySQL : select system_user(); System.out.println("URL = "+conn3.getMetaData().getURL()); System.out.println("localSocketAddress (by properties) = "+properties.getProperty("localSocketAddress")); System.out.println("System Functions = "+conn3.getMetaData().getSystemFunctions()); //conn3.close(); }catch(Exception ex){ System.err.println("Erreur à la 3ème connection : "+ex.getMessage()); //ex.printStackTrace(); }
** BEGIN NESTED EXCEPTION **
java.net.UnknownHostException
MESSAGE: NomUtilisateurQuiSeConnecte: NomUtilisateurQuiSeConnecte
STACKTRACE:
java.net.UnknownHostException: NomUtilisateurQuiSeConnecte: NomUtilisateurQuiSeConnecte
at java.net.InetAddress.getAllByName0(InetAddress.java:1011)
at java.net.InetAddress.getAllByName0(InetAddress.java:981)
at java.net.InetAddress.getAllByName(InetAddress.java:975)
at java.net.InetAddress.getByName(InetAddress.java:889)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:295)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2744)
at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at fr.mon-entreprise.TestDB.main(TestDB.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
** END NESTED EXCEPTION **
Quelqu'un sait il s'il est possible de forcer le "host" de MySQL, et si oui comment ?
Cordialement,
Partager