gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:49:54 27 4
gpt4 key购买 nike

好的,我提前为这个问题道歉,因为它太宽泛了。

基本上,我开发的系统涉及:

  1. 用户可以注册帐户的网站。此过程将在服务器上为该帐户创建一个新数据库。
  2. 用 Java 编写的客户端外部应用程序。这将访问数据库中的数据,以便为用户执行有用的操作。
  3. 在第一点中创建的数据库本身。

我的问题是关于应实现哪些安全措施以确保数据库安全以及如何安全地传输数据。

我的担忧是:

  1. MySQL 数据库实际上是如何安全的?当我在注册帐户时创建数据库时,是否需要为该数据库设置密码?这会加密数据库吗?这足以阻止某人访问数据吗?
  2. Java 很容易反编译。假设我要将帐户数据库的登录数据存储在主数据库中,我如何保护该数据库并以不需要我硬编码连接到该数据库的详细信息的方式从我的应用程序连接到它在应用程序中。我相信这在编译为 native 代码的语言中一定也是一个问题,因为有人可以在应用程序运行时执行内存转储来获取此类变量(我认为)。
  3. 当从服务器向客户端发送和接收数据时,反之亦然,如何防止网络窃听和获取数据(无论是登录凭据还是数据库中的其他数据)。我假设这就是 SSL 的用途,但这是我需要使用的全部吗?

这些问题的可能答案是在 Java 客户端应用程序和数据库之间使用中间人服务,这与在 Javascript 和 MySQL 数据库之间使用 PHP 的方式非常相似(尽管 PHP 是必需的)这个案例)。我假设这个中间人服务将包含主数据库等的登录凭据,并将包含自己的方法来防止未经授权的访问。如果这是正确的,我将如何设置这样的服务?是否可以利用 Java 应用程序中的 PHP 脚本来传输数据?

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

最佳答案

How is a MySQL database actually secured? When I create the database at the point of account registration, do I need to set a password for that database? Does this encrypt the database? Is this enough to prevent someone from accessing the data?

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

  2. 密码与用户帐户关联,与数据库无关。

  3. MySQL 数据库未加密。

  4. 是的...不过,如果不受信任的人可以获得数据库本身或托管数据库的系统的管理员控制权,那么一切都将落空。

Java is pretty easy to decompile. Assuming I am to store the log in data for an account database in a master database, how do I secure that database and connect to it from my application in a way which doesn't require me to hard code the details for connecting to that database in the application.

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

I believe this must be an issue in languages which are compiled to native code too, as someone could just perform a memory dump to get hold of such variables at run time of the application (I think).

没错。

When sending and receiving data to the client from the server and vice versa, how do I prevent someone from network eavesdropping and getting hold of the data (whether this be log in credentials or other data from the database). I assume this is what SSL is for, but is that all I need to use?

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

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

关于java - 如何保护 MySQL 数据库免受未经授权的访问并从 Java 应用程序安全地连接到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13801617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com