0

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

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("", "");

}

}

也许这与在“本地主机”上运行测试有关?

非常感谢!

4

1 回答 1

1

我猜您是以匿名用户身份登录的。

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

DELETE FROM mysql.user WHERE user='';

FLUSH PRIVILEGES;

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

于 2013-07-31T09:15:42.330 回答