如何保护MySQL数据库免受未经授权的访问,并从Java应用程序安全地连接到它

如何保护MySQL数据库免受未经授权的访问,并从Java应用程序安全地连接到它,java,mysql,security,Java,Mysql,Security,好的,我为这个问题提前道歉,因为它相当广泛 基本上,我正在开发一个系统,涉及: 用户可以注册帐户的网站。此过程将在服务器上为该帐户创建一个新数据库 用Java编写的客户端外部应用程序。这将访问数据库中的数据,以便为用户执行有用的操作 在第一点中创建的数据库本身 我的问题是,为了保证数据库的安全,应该采取哪些安全措施,以及如何安全地传输数据 我关注的是: MySQL数据库实际上是如何保护的?当我在帐户注册点创建数据库时,是否需要为该数据库设置密码?这会加密数据库吗?这是否足以阻止某人访问数据 Ja

好的,我为这个问题提前道歉,因为它相当广泛

基本上,我正在开发一个系统,涉及:

  • 用户可以注册帐户的网站。此过程将在服务器上为该帐户创建一个新数据库
  • 用Java编写的客户端外部应用程序。这将访问数据库中的数据,以便为用户执行有用的操作
  • 在第一点中创建的数据库本身
  • 我的问题是,为了保证数据库的安全,应该采取哪些安全措施,以及如何安全地传输数据

    我关注的是:

  • MySQL数据库实际上是如何保护的?当我在帐户注册点创建数据库时,是否需要为该数据库设置密码?这会加密数据库吗?这是否足以阻止某人访问数据
  • Java非常容易反编译。假设我要将帐户数据库的登录数据存储在主数据库中,如何保护该数据库并从应用程序连接到它,而不需要我在应用程序中硬编码连接到该数据库的详细信息。我相信这在编译为本机代码的语言中一定是一个问题,因为有人可能只是执行内存转储,以便在应用程序的运行时掌握这些变量(我认为)
  • 当从服务器向客户机发送和接收数据时,以及从服务器向客户机发送和接收数据时,如何防止网络窃听和获取数据(无论是登录凭据还是数据库中的其他数据)。我假设这就是SSL的用途,但这就是我需要使用的全部吗
  • 这些问题的一个可能答案是在Java客户端应用程序和数据库之间使用中间人服务,这与在Javascript和MySQL数据库之间使用PHP的方式大致相同(尽管在这种情况下PHP是必要的)。我假设这个中间人服务将包含主数据库等的登录凭据,并包含它自己的方法来防止未经授权的访问。如果这是正确的,我将如何设置这样的服务?是否可以利用Java应用程序中的PHP脚本来传输数据

    我希望我的问题有道理,不要太含糊不清。
    提前感谢您的时间。

    您认为客户端应用程序不应存储数据库身份验证信息是正确的。反编译Java应用程序以检索这些连接字符串太容易了

    相反,正如我认为您理解的那样,您应该公开一个提供应用程序所需信息的web服务。有几种方法可以做到这一点。例如,您可以编写一个REST接口,以便您的客户机对服务器进行HTTP调用,并接收JSON或XML响应。您还可以编写一个JavaRMI服务器,它允许您的客户机在服务器上进行远程方法调用,以找到他们需要的信息。如果没有更具体的问题或限制,我真的无法就哪一个更合适提出建议

    MySQL数据库实际上是如何保护的?当我在帐户注册点创建数据库时,是否需要为该数据库设置密码?这会加密数据库吗?这是否足以阻止某人访问数据

  • 使用帐户名和密码,以及“授予”不同用户的特定数据库的不同访问权限

  • 密码与用户帐户关联,而不是与数据库关联

  • MySQL数据库没有加密

  • 是的。。。不过,如果不受信任的人可以获得数据库本身或数据库宿主系统的管理控制权,那么所有赌注都没有了

  • Java非常容易反编译。假设我要将帐户数据库的登录数据存储在主数据库中,如何保护该数据库并从应用程序连接到它,而不需要我在应用程序中硬编码连接到该数据库的详细信息

    一种常见的方法是将连接详细信息和/或帐户凭据放入应用程序在启动时加载的属性文件中。但是,我认为您真正的问题是希望允许在不受信任的机器上运行的应用程序更新数据库。一个更合理的解决方案是在一个安全的机器上运行一个受信任的服务,让不受信任的机器与受信任的服务而不是直接与数据库通信

    我相信这在编译为本机代码的语言中一定是一个问题,因为有人可能只是执行内存转储,以便在应用程序的运行时掌握这些变量(我认为)

    这是正确的

    当从服务器向客户机发送和接收数据时,以及从服务器向客户机发送和接收数据时,如何防止网络窃听和获取数据(无论是登录凭据还是数据库中的其他数据)。我假设这就是SSL的用途,但这就是我需要使用的全部吗

    SSL足以保护通过网络发送的数据(或凭据)


    中间人攻击的情况并不明朗,尤其是在网络浏览器和可信根是否真的应该被信任的问题上。但是,如果我正确理解了我所读的内容,那么有一种使用SSL的方法应该对MITM免疫。基本上,您需要为所有参与者(客户端、服务器)生成单独的SSL证书,并使用带外分发机制将其分发给所有参与者;i、 不是通过互联网。然后,您只接受来自具有已知证书的各方的SSL连接。并确保使用TLS 1.1或1.2。

    我看到了一些可能性-

  • 使用JBossSX框架