java 显示用于连接到服务器的用户名和密码的代码

8ehkhllq  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(119)

我正在编写一个方法,使我的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的程序,所以我不得不临时准备一些。

fsi0uk1n

fsi0uk1n1#

关于问题#2:
没有安全的方法将密码存储在代码本身中。当然,您可以尝试加密密码,但当连接建立时,您的代码必须解密它,因此加密密钥几乎“对所有访问您的源代码的人”可见。有了这个密钥,就有可能获得真实的的密码,只是稍微复杂一点。
唯一安全的方法是让用户通过自己的输入登录凭证。可以是低级别的(启动应用程序时的程序参数),也可以是某种形式的“登录对话框”(如果应用程序有GUI)。
第三种选择是创建一个限制数据库访问的技术用户,这取决于您正在使用的应用程序,但这通常会导致安全问题。

6mw9ycah

6mw9ycah2#

您可以创建应用程序,使其发送https请求并向Web服务器验证自身。使用什么进行验证由您决定:客户端IP、用户名、密码、客户端证书等
一旦通过身份验证,您的Web服务器可以传输一个一次性用户名/密码,客户端使用该用户名/密码登录到您的数据库。
这样做的好处是,你仍然可以控制用户是获得完全访问权限还是受限访问权限,或者因为任何原因而不再获得密码,而且你的应用程序中没有安全漏洞。

相关问题