-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);

アプレットは署名されているため、データベースに接続する権利があります。データベース ユーザーにはすべての previllege が付与され、ユーザー名、パスワード、およびデータベース名は正しいです。これは、まったく同じ情報を使用して PHP 経由でデータベースに接続できるためです。どうすれば修正できますか?

出力されたスタック エラーは次のとおりです: Access denied for user 'moodlele_garanti'@'localhost' (using password: YES)

4

1 に答える 1

2

あなたは自分が使っている技術や、その仕組みをよく理解していないようです。

コメントで次のように述べています。

私のウェブサイトのクライアント マシンは、PHP のロジックのように ftp 経由でアップロードされた内部で実行されるコードのローカルホストでもあります。ローカルホストを記述してサーバーにアップロードすると、接続されます。

その PHP はwebserver で実行されています。これは、たまたま mysql サーバーと同じホストでもあります。したがって、PHP では yeslocalhostが正しいです。自宅のコンピューターの Web ブラウザーが TCP 経由で Web サーバーに接続し、PHP が Web サーバー上で実行され、同じホスト上の mysql サーバーに接続され、すべてが順調です。

Java アプレットは、マシンのブラウザで実行されます。アプレットは Web サイトから自宅のマシンにダウンロードされ、そのマシンで実行されます。あなたのコードがあなたの質問に書かれている方法では、自宅のマシン上のmysqlサーバーに接続しようとしますlocalhostあなたのコンピュータです。

そのアプレットがホスティング会社の mysql サーバーに接続するには、そのホストへの接続を試みる必要があります。さらに、mysql サーバーへのリモート接続を許可するためにそのサーバーに対してポートを開く必要があり、mysql は外部 (パブリック) IP アドレスで接続をリッスンする必要があり、そのユーザーに権限を付与する必要があります。リモートホストから接続できるようにします。

一般に、これは非常に悪い考えであることは、おそらく言及する価値があります。データベースを世界に公開することが良い考えであることはめったにありません。アクセス許可の小さな間違いが、非常に大きな問題を引き起こします。他にも多くのセキュリティ上の問題があります。人々はそれをしますか?もちろん。それでもいい考えにはなりません。

通常、一般消費向けに設計されたアプレットは、仲介サービス (Web API や RMI など) を使用して、物事をロックダウンするための戦いの機会を提供します。

于 2013-07-16T20:54:02.300 に答える