我正在为大学的安全课程构建数据库连接扫描程序。我已经使用了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”上运行测试有关吗?
非常感谢!
答案 0 :(得分:1)
我猜您正在以anonymous user登录。
您可以通过删除这样的匿名用户来使您的本地MySQL服务器安装更安全(并因此强制上面的代码抛出错误):
DELETE FROM mysql.user WHERE user='';
FLUSH PRIVILEGES;
然后尝试使用无用户名和密码进行连接。