Connection à MySQL v5 - Forcer le "host" à inclure le nom de l'utilisateur
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:
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:
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,