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();
            }
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();
            }
Le genre d'erreur affiché est celui ci :
** 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,