我正在编写一个方法,使我的Java程序能够创建一个数据库连接,最终使我能够从其他类/方法访问它。
public class DatabaseConnection
{
private Connection databaseLink;
public Connection getConnection()
{
String url = "jdbc:mysql://localhost/DBname";
try
{
Class.forName("com.mysql.cj.jdbc.Driver");
databaseLink = DriverManager.getConnection(url, "fakeUsr", "fakePsw"); //these are not the real username/password
}
catch (Exception e)
{
e.printStackTrace();
}
return databaseLink;
}
}
我有几个问题:1)不使用我的电脑的人将无法进入我的服务器,因为我写了“localhost”:String url = "jdbc:mysql://localhost/DBname";
2)我输入了真实的的用户名和密码,而不是“fakeUsr”和“fakePsw”。我很确定我的程序的普通用户不应该能够访问这些信息。有没有其他方法可以允许访问数据库,而不使用户名和密码对任何访问我的源代码的人可读?
对于版本1:我尝试在此处键入我的IP地址而不是“localhost”:String url = "jdbc:mysql://localhost/DBname"; //changed localhost to my IP address
但是我得到了“通信链路故障”。
对于第2版:我真的不知道如何解决这个问题。我从来没有编写过需要访问DB的程序,所以我不得不临时准备一些。
2条答案
按热度按时间fsi0uk1n1#
关于问题#2:
没有安全的方法将密码存储在代码本身中。当然,您可以尝试加密密码,但当连接建立时,您的代码必须解密它,因此加密密钥几乎“对所有访问您的源代码的人”可见。有了这个密钥,就有可能获得真实的的密码,只是稍微复杂一点。
唯一安全的方法是让用户通过自己的输入登录凭证。可以是低级别的(启动应用程序时的程序参数),也可以是某种形式的“登录对话框”(如果应用程序有GUI)。
第三种选择是创建一个限制数据库访问的技术用户,这取决于您正在使用的应用程序,但这通常会导致安全问题。
6mw9ycah2#
您可以创建应用程序,使其发送https请求并向Web服务器验证自身。使用什么进行验证由您决定:客户端IP、用户名、密码、客户端证书等
一旦通过身份验证,您的Web服务器可以传输一个一次性用户名/密码,客户端使用该用户名/密码登录到您的数据库。
这样做的好处是,你仍然可以控制用户是获得完全访问权限还是受限访问权限,或者因为任何原因而不再获得密码,而且你的应用程序中没有安全漏洞。