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

我有一个通过以下代码连接到数据库的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); 

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

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

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

在评论中你说:

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

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

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

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

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

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