Ne peut pas créer PoolableConnectionFactory (Accès refusé pour l'utilisateur "@'localhost'
J'ai essayé de configurer un DatabaseConnectionPool pour une application web pour le couple des derniers jours, sans succès. J'ai lu les articles pertinents de la Tomcat docs et une excellente affaire autour de l'objet, et que je suis fait tout droit, mais, évidemment, pas parce que j'obtiens toujours le message d'erreur suivant:
Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES))
Je ne suis pas l'erreur quand je lance Tomcat en cours d'exécution, mais lorsque j'essaie d'exécuter la suite de servlet:
package twittersearch.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import twittersearch.model.*;
public class ConPoolTest extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
Context ctx = null;
DataSource ds = null;
Connection conn = null;
try {
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/twittersearchdb");
conn = ds.getConnection();
if(conn != null) {
System.out.println("have a connection from the pool");
}
} catch(SQLException e) {
e.printStackTrace();
} catch(NamingException e) {
e.printStackTrace();
} finally {
try {
if(conn!=null) {
conn.close();
}
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
Le contexte de la webapp est:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<!-- Configure a JDBC DataSource for the user database -->
<Resource name="jdbc/twittersearchdb"
type="javax.sql.DataSource"
auth="Container"
user="root"
password="mypwd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/twitter"
maxActive="8"
maxIdle="4"/>
</Context>
Ce que je ne comprends pas, c'est pourquoi l'erreur n'est pas de dire que l'accès est refusé à 'root'@'localhost' quand j'ai précisé que c'est à l'utilisateur.
Ce que j'ai essayé:
Dois-je avoir un duplicata context.xml? Pas de. J'ai supprimé le défaut de Tomcat 6.0/conf. J'ai essayé de mettre un context.xml dans [mywebappname]/META-INF/context.xml mais pas seulement-ce pas le travail, mais ont abouti à la création d'un fichier nommé TwitterSearch.xml qui a été généré automatiquement et de les mettre dans le Tomcat 6.0/conf/Catalina/localhost répertoire. Alors maintenant, je suis juste éditer qu'un seul et c'est le seul que j'ai.
Est-il de la version de Tomcat? Eh bien, je l'ai entièrement réinstallé la dernière version de Tomcat 6.0, donc je ne pense pas que c'est.
Sommes-nous en manque quelques pots? J'ai l'tomcat-dbcp.jar, jconnector.jar et tous les autres que je pense que je suis destiné à avoir dans le Tomcat 6.0/lib.
Quand je regarde les mots de passe dans la base de données MySQL, ils semblent avoir été codées à des fins de sécurité dans un long chaîne alphanumérique. Est-ce normal? Dois-je avoir dans mon context.xml ou tout simplement le mot de passe normal?
Je ne sais vraiment pas comment je peux régler cette question et serions très reconnaissants de recevoir des conseils d'experts.
Merci beaucoup à l'avance.
Joe
OriginalL'auteur Joe | 2010-09-23
Vous devez vous connecter pour publier un commentaire.
Votre installation a l'air bien. Cela ressemble à purly être un problème d'autorisations.
Vous devez accorder à cet utilisateur l'accès à mysql. Alors que Java va se connecter à localhost, il le fera à l'aide de tcp/ip - toutefois dans mysql localhost et 127.0.0.1 avoir une signification différente. L'émission de cette SQL devrait faire l'affaire.
Qui suppose Java résout 'localhost' 127.0.0.1, si les choses ne fonctionne toujours pas, vous pouvez essayer de changer votre chaîne de connexion à "jdbc:mysql://127.0.0.1:3306/twitter"
Comme vous l'avez maintenant, le mot de passe en clair.
ACCORDER à TOUS sur twitter.* "@'Localhost' identified BY 'mypwd';
J'ai supprimé la racine de l'utilisateur, de sorte que le seul utilisateur est "@'localhost' et ça fonctionne. Alors que je suis heureux que cela fonctionne, quelque chose est toujours pas le droit parce que j'ai spécifié dans mon apps context.xml que l'utilisateur est "root" alors je me demandais pourquoi " va travailler et, en fait, le message d'erreur que j'ai fait beforee a toujours été de refuser l'accès à "@'localhost' et pas 'root'@'localhost'. Avez-vous une idée de quoi cela peut-il être le cas?
Avez-vous savoir pourquoi le nom d'utilisateur n'est pas utilisé dans le message d'erreur? Je veux essayer de la subvention de commande, mais ne souhaitez pas supprimer l'utilisateur root ou quelque chose comme ça..
OriginalL'auteur nos
Dans votre configuration context.xml pour la webapp vous devez changer d'utilisateur="root" par le nom d'utilisateur="root"
OriginalL'auteur taf