JDBC连接:拒绝用户访问甚至所有Previlleges都被授予

时间:2013-07-16 19:53:05

标签: java database jdbc japplet

我有一个通过以下代码连接到数据库的JApplet:

    String url = "jdbc:mysql://localhost:3306/moodlele_survey";
    String user = "moodlele_garanti";
    String password = "garanti";



    try {
        panel.add( new JLabel("before driver"));
        Class.forName("com.mysql.jdbc.Driver");
        panel.add( new JLabel("failed"));
        Connection con = DriverManager.getConnection(url, user, password);

小程序已签名,因此它有权连接数据库。数据库用户被授予所有previlleges并且用户名,密码和数据库名称是正确的,因为我可以通过PHP使用相同的信息连接到数据库。我该如何解决?

打印的堆栈错误是: 用户“moodlele_garanti”@“localhost”的访问被拒绝(使用密码:是)

1 个答案:

答案 0 :(得分:2)

您似乎并没有真正掌握您正在使用的技术或它们的工作方式。

在评论中说明:

  

我的网站的客户端计算机也是本地主机,用于在其中运行的代码通过ftp上传,如PHP中的逻辑:您编写localhost并上传到服务器,然后连接

PHP正在网络服务器上运行 。这也恰好与你的mysql服务器是同一个主机。所以,是localhost在PHP中是正确的。您家中计算机上的Web浏览器通过TCP连接到Web服务器,PHP在Web服务器上执行,连接到同一主机上的mysql服务器,一切都很好。

Java小程序在您计算机上的浏览器中运行 。小程序从网站下载到您家中的计算机,并在该计算机上运行。您的代码在您的问题中编写的方式,然后尝试连接到您家中机器上的mysql服务器localhost是您的计算机。

为了让该applet连接到托管公司的mysql服务器,它需要尝试连接那个主机。此外,端口需要在该服务器上打开/允许远程连接到mysql服务器,mysql需要监听外部(公共)IP地址上的连接,并且您需要为该用户授予权限能够从远程主机连接。

值得一提的是,一般来说这是一个非常糟糕的主意。很少将您的数据库暴露给世界一个好主意;授予访问权限的一个小错误会产生一个非常大的问题。还有许多其他安全问题。人们这样做吗?当然。仍然不是一个好主意。

通常,专为公共消费而设计的小程序将使用中间服务(例如Web API甚至RMI)来为您提供锁定机会的机会。