-1

我有一个通过以下代码连接到数据库的 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'的访问被拒绝(使用密码:YES)

4

1 回答 1

2

你似乎并没有真正掌握你正在使用的技术,或者它们是如何工作的。

在您声明的评论中:

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

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

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

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

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

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

于 2013-07-16T20:54:02.300 回答