MYSQL连接器说它已经连接错误的用户名?

时间:2013-07-31 08:36:17

标签: java mysql database-connection port-scanning

我正在为大学的安全课程构建数据库连接扫描程序。我已经使用了DriverManager.getConnection(connectionURL,用户名,密码),它似乎工作正常,但有一个例外,我无法理解。如果我输入错误的用户名,它仍然会返回连接???我的测试代码粘贴在下面。任何指针都将非常感激。如果我输入了错误的密码,它会返回正确的错误,如果我关闭服务器,它会告诉我。但由于某些未知的原因,它不会告诉我用户名是否错误,就好像它甚至没有检查!

public class DBConnector {


Connection connection = null;
String dbURL = "jdbc:mysql://localhost:3306";
String userName;
String password;


public DBConnector() {
    // TODO Auto-generated constructor stub
}

public Connection tryConnection(String username, String password){
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(dbURL, username, password);

        System.out.println("Connected");

    } catch (InstantiationException e) {
        System.out.println("No Connection");
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        System.out.println("Connection Refused");
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        System.out.println("Sql Ex");
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return connection; 

}
}   

这是我运行该方法的主要类。

public class MainTest {

public static void main(String[] args) {

    DBConnector dbc = new DBConnector();

    dbc.tryConnection("", "");

}

}

这可能与在“Localhost”上运行测试有关吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我猜您正在以anonymous user登录。

您可以通过删除这样的匿名用户来使您的本地MySQL服务器安装更安全(并因此强制上面的代码抛出错误):

DELETE FROM mysql.user WHERE user='';

FLUSH PRIVILEGES;

然后尝试使用无用户名和密码进行连接。