Acesso Negado com MYSQL

Membros…

estou tendo um problema com o acesso a base de dados, onde na abertura de conexão, está aconteceu uma exception que não consigo identificar o problema. Está sendo retornando a seguinte mensagem:



java.net.SocketException
MESSAGE: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)

STACKTRACE:

java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)
	at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:407)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:268)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
	at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
	at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.academico.bancodados.dao.FabricaConexao.getConexao(FabricaConexao.java:37)
	at br.academico.bancodados.dao.AlunoDAO.<init>(AlunoDAO.java:18)
	at br.academico.controle.AutenticaAluno.doPost(AutenticaAluno.java:42)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAsPrivileged(Unknown Source)
	at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
	at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:50)
	at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)

Todos os passos de conexão já revi e estão corretos… minha classe de conexão é essa:

import java.net.ConnectException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import sun.net.ConnectionResetException;

public class FabricaConexao
{
	private static Connection conn = null;

	// private final String server = "localhost"; // ip do server ou hostname

	// private final String portNumber = "1433"; // SERÁ PORTA PADRÃO

	// private final String databaseName = "academico"; // banco

	// private final String selectMethod = "cursor"; // metodo de pesquisa no
	// banco

	private static final String DRIVER = "com.mysql.jdbc.Driver"; // driver
																	// utilizado

	private static final String USUARIO = "root"; // usuario no banco

	private static final String SENHA = "senha"; // password no banco

	private static final String URL = "jdbc:mysql://127.0.0.1/academico"; // URL

	public static Connection getConexao() throws SQLException
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/academico", "root", "senha");					
			//conn.setAutoCommit(true);
			
			System.out.println("Conectado com Sucesso !!!");

			return conn;

		}
				
		catch (Exception e)
		{
			throw new SQLException(e.getMessage());

		}
	}// Fim getConexao

}// Fim class

O usuário root está criado. O banco está rodando normalmente e aceitando consultas pela console. A porta é essa mesma especificada, 3306. O Driver ODBC está inserido no ClassPath.

Pessoal, agradeceria muito a ajuda e fico grato a todos.

Alguma coisa de segurança ta bloqueando seu acesso, tenta desativar o firewall… se é que esta ativado

Cara… já tinha feito esse teste tb, más ainda continua com o mesmo problema… Já utilizei essa mesma classe em outro projeto… e dava certo… A diferneça agora é q to usando em um projeto WEB. Mais uma coisa… to testando na minha máquina local…

Mais um palpite… aqui na empresa meu servidor de proxy tentar resolver o localhost por existir um direcionamento pra isso, assim sempre uso 127.0.0.1, tenta mudar na sua classe a conexão de “localhost” para “127.0.0.1”…

Caro Maniezo… eu tentei fazer desta forma tb… Infelizmente ainda n tiver sucesso… más… to na busca dele… :slight_smile:
Sim… voltando ao problema…

Pelo aconpanhamento do Debug, (Eclipse 3.2), percebi que não está sendo criado o objeto de conexão.

try
		{
			// FabricaConexao fc = new FabricaConexao();
			// conexao = fc.getConexao();
			
			Class.forName("com.mysql.jdbc.Driver");
			conexao = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/academico", "root", "senha");
			// conn.setAutoCommit(true);

			System.out.println("Conectado com Sucesso !!!");

		}
		catch (ClassNotFoundException e)
		{
			System.out.println(e.getStackTrace());

		}

		catch (SQLException e)
		{
			System.out.println(e.getStackTrace());

		}

Como podem ver, não estou mais instanciando um objeto da classe FabricaConexao, e sim, fazendo no construtor padrão. O que não está mais possibilitando o erro de acesso, más não consegue criar o objeto Connection.

teu firewall do windows tá desabilitado?? tem certeza??

Pela msg, o problema é de rede…

Pela linha de comanado no prompt tu consegue acessar a base normalmente?/

[quote=zirocool][quote=jayro]

java.net.SocketException
MESSAGE: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)

[/quote]

Pela msg, o problema é de rede…

Pela linha de comanado no prompt tu consegue acessar a base normalmente?/[/quote]

Sim… normalmente consigo fazer consultas no banco… o problema tá em coseguir criar o Objeto de conexão Connection… nãos sei o porqur, pois está declarado normalmente…

Alguém já teve esse cenário ?

:frowning:

cara testa ai…

/** Classe para conexão com banco de dados
 * @author Igor Nunes
 * @since 16/07/2007
 * @version versão 1.0
 */
import java.sql.*;
import java.swing.*;
public class Conexao
{
    //variáveis para manipulação de banco de dados
    private Connection con;
    private Statement st;
    private ResultSet rs;
    private String sql;

    /** Método para conectar com o banco de dados  
     *@throws - mensagem de erro ao falhar a conexão*/
    public Conexao()
    {
        try
        {
           Class.forName("com.mysql.jdbc.Driver");
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/seubanco","root","senha");
           st = con.createStatement();
        }
        catch ( Exception e)
        {
            JOptionPane.showMessageDialog(null,"Falha na conexão.");
        }
    }
    
   /** Método para retornar a conexão  
   *@return Connection - conexão com banco de dados*/
    public Connection getConexao()
    {
        return con;
    }
    
    /** Método para fechar o ResultSet  
     *@param ResultSet - fecha o ResultSet da sql*/
    public void fechar(ResultSet rs)
    {
        if (rs != null)
        {
            try
            {
                rs.close();
            }
            catch (Exception e)
            {
                JOptionPane.showMessageDialog(null,"Erro ao fechar operador de banco de dados.");
            }
        }
    }
    
    /** Método para fechar o Statement  
     *@param Statement - fecha o Statement da sql*/
    public void fechar(Statement st)
    {
        if (st != null)
        {
            try
            {
              con.close();  
            }
            catch (Exception e)
            {
                JOptionPane.showMessageDialog(null,"Erro ao fechar estado.");
            }
        }
    }
    
     /** Método para fechar a conexão   
     *@throws - mensagem de erro ao não fechar a conexão*/
    public void fecharConexao()
    {
        if (con != null)
        {
            try
            {
                con.close();
            }
            catch(Exception e)
            {
                JOptionPane.showMessageDialog(null,"Erro ao fechar conexão.");
            }
        }
    }

    /** Método para execução de comandos sql que retornam resultados do banco de dados
     *@param String - sql de execução no banco
     *@return ResultSet - resultado da sql executada   
     *@throws - mensagem de erro sql*/
    public ResultSet getResults(String sql)
    {
        ResultSet rs = null;
        try
        {
            rs = st.executeQuery(sql);
            if (! rs.next())
            {
                rs = null;
            };
        }
        catch(SQLException e)
        {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"Erro no banco de dados - comando sql");
        }
        return rs;
    }
    
    /**Método para execução de sql de manipulação de dados
     *@param String - sql de execução no banco
     *@return boolean - retorna true para execução da sql   
     *@throws - mensagem de erro sql*/
    public boolean getStatement(String sql)
    {
        //Statement st = null;
        boolean status = true;
        try
        {
            st.executeUpdate(sql); 
        }
        catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null,"Erro no banco de dados - comando sql 2");
            status = false;
        }
        return status;
    }
    
    /** Método para retornar o string sql para execução   
     *@return String - instrução sql*/
    public String getSql()
    {
        return sql;
    }
    
     /** Método para obter o instrução sql  
     *@param String - instrução sql*/
    public void setSql(String sql)
    {
        this.sql = sql;
    }
    
}

Cara… o Objeto de conexão Conn ainda tá sendo retornado como NULL. Andei pesquisando e parece ser um bug no MySql 4.1. Vou baixar a versão mais recente e testar… a única explicação lógica que to encontrando… pois já fiz de tudo e nadas…

:frowning:

e o seguinte colega tenta verificar senha e o usuário pode ser que na hora de acessar a base vc diretamente esteja colocando a senha certa e quando configura via conexão colocar ela errada

Parceiro… tambem ja criei um usuario teste, com senha em branco e ainda nadas… Como falei acima… vou atualizar o MySql pra verificar a possibilidade de bug nele… Ainda hoje faço esse teste… e caso der certo, comento aqui… :wink:

A seu drive JDBC é compatível com a versão do MySQL que você está utilizando?

[quote=sergio.souza]A seu drive JDBC é compatível com a versão do MySQL que você está utilizando?

[/quote]

Eu to fazendo uns testes com as versoes do Driver JDBC 3.1 e 5.1 para o MySql 4.1 e com o Driver JDBC para o banco MSSQl 2000… e to analisando a documentaçao de ambos pra ver o que pode ta acontecendo… logo logo, divulgo o resultado aqui no forum… :wink:

Aí pessoal… o que tava acontecendo era o seguinte… tinha uma opção marcada no Eclipse, onde eu estava utilizando o Security Maneger na subida do TomCat 5.5… Depois que desmaquei essa opção, passou a criar o Objeto de coneção normalmente. Mais uma coisa… toda adocumentação sobre o Security Manager pode ser vista no próprio Tom Cat.

Agradeço o empenho de todos !

:thumbup: