Acces denied error from Java to MySQL

2019-08-09 23:40发布

问题:

I'm getting an error in a GUI, because I'm using JGrasp as IDE for this project and the error states;

Access denied for user'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net'(using password: YES)

And here is the only class for the application;

package net.roseindia.jtableExample;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.sql.*;
import java.awt.event.*;

public class SearchResult implements ActionListener{
JFrame frame, frame1;
JTextField textbox;
JLabel label;
JButton button;
JPanel panel;
static JTable table;

String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://buiud.com:3306/buiud458_androidhive";
String userName = "XXXX";
String password = "XXXX";
String[] columnNames = {"Roll No", "Name", "Class", "Section"};

public void createUI()
{
    frame = new JFrame("Database Search Result");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(null);
    textbox = new JTextField();
    textbox.setBounds(120,30,150,20); 
    label = new JLabel("Enter your roll no");
    label.setBounds(10, 30, 100, 20);
    button = new JButton("search");
    button.setBounds(120,130,150,20);
    button.addActionListener(this);

    frame.add(textbox);
    frame.add(label);
    frame.add(button);
    frame.setVisible(true);
    frame.setSize(500, 400);        
}   

public void actionPerformed(ActionEvent ae)
{
    button = (JButton)ae.getSource();
    System.out.println("Showing Table Data.......");
        showTableData();            
}   

public void showTableData()
{

    frame1 = new JFrame("Database Search Result");
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setLayout(new BorderLayout());       
    //TableModel tm = new TableModel();
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(columnNames);
    //DefaultTableModel model = new DefaultTableModel(tm.getData1(), tm.getColumnNames());      
    //table = new JTable(model);
    table = new JTable();
    table.setModel(model);      
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    table.setFillsViewportHeight(true);
    JScrollPane scroll = new JScrollPane(table);
    scroll.setHorizontalScrollBarPolicy(
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scroll.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);      
    String textvalue = textbox.getText();
    String roll= "";
    String name= "";
    String cl = "";
    String sec = "";
    try
    {           
        Class.forName(driverName);      
        Connection con = DriverManager.getConnection(url, userName, password);
        String sql = "select * from products where pid = "+textvalue;
        PreparedStatement ps = con.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        int i =0;
        if(rs.next())
        {
            roll = rs.getString("pid");
            name = rs.getString("name");
            cl = rs.getString("price");
            sec = rs.getString("phone");                    
            model.addRow(new Object[]{roll, name, cl, sec});
            i++;                
        }
        if(i <1)
        {
            JOptionPane.showMessageDialog(null, "No Record Found","Error",
                    JOptionPane.ERROR_MESSAGE);
        }
        if(i ==1)
        {
        System.out.println(i+" Record Found");
        }
        else
        {
            System.out.println(i+" Records Found");
        }
    }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, ex.getMessage(),"Error",
                JOptionPane.ERROR_MESSAGE);
    }
    frame1.add(scroll);
    frame1.setVisible(true);
    frame1.setSize(400,300);
}

public static void main(String args[])
{
    SearchResult sr = new SearchResult();
            sr.createUI();              
}
}

回答1:

The most likely explanation is that the user is not defined in MySQL.

Note that in MySQL a user is identified by BOTH the hostname (or IP address) the user connects from, AND the username. (NOTE: a '%' can be used as a wildcard for the hostname, to allow connection from any host, but MySQL will first look for an exact match, and then fall back to the wildcard if no match is found.)

SELECT u.Host,
     , u.User
     , u.Password
  FROM mysql.user u
 WHERE u.User = 'buiud458_raklar'

We'd expect there to be row there with Host value of 'd24-36-33-148.home1.cgocable.net', or a row with a host value wildcard of '%'.

You can compare the password you are using to the value stored in the table, with the PASSWORD function...

SELECT PASSWORD('mysecret') 

Each user@host can be granted privileges on individual databases.

SELECT d.Host
     , d.User
     , d.Db
  FROM mysql.db d
 WHERE d.User = 'buiud458_raklar'

The easiest way to setup a user with privileges on a database:

CREATE USER 'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net' IDENTIFIED BY 'secret' ;
GRANT ALL PRIVILEGES ON mydb.* TO  'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net' ;

(NOTE: Granting all privileges to a user typically violates the best-practice principle of "least privilege". This user may not actually require every privilege, for example, DROP TABLE privilege. Unnecessarily granting privileges is an additional security risk.)

http://dev.mysql.com/doc/refman/5.5/en/adding-users.html



回答2:

Basically the permissions in the DB aren't set up to allow the user you are using to access the DB programmatically.

You will need:

  • Access to mysqladmin
  • The root user/password

Go into mysqladmin and execute this command (I'm assuming the username based on the message you provided):

mysql> grant all on *.* to 'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net' identified by SOMEPASSWORD with grant option;

The above command will give the user buiud458_raklar READ/WRITE/UPDATE/DELETE to every table when accessed from host d24-36-33-148.home1.cgocable.net. I assume this is what you want.

If not, there are numerous articles on the web, and This article here at Stackoverflow.com



标签: java mysql jdbc