【发布时间】:2021-06-18 13:53:08
【问题描述】:
我目前正在开发一个使用 JDBC 连接到 Azure DB 的 Java 应用程序。这就是我当前的代码的样子 -
File file = new File("filename.txt");
Scanner scanner = new Scanner(file);
String pwd = scanner.nextLine();
String connectionUrl =
"jdbc:sqlserver:{A link here};" +
"database={DBName}; +
"user={UserName};" +
"password=" + pwd + ";"
"encrypt=true;" +
"trustServerCertificate=false;" +
"hostNameInCertificate=*.database.windows.net;" +
"loginTimeout=30;";
我打算在完成后在 Github 上公开上传这个项目,显然在那里有一个纯文本密码似乎是一个糟糕的主意。
但是,我不确定最好的方法是什么。我不认为存储散列密码会起作用,因为数据库字符串需要纯文本。我能想到的最好的办法是将密码存储在一个文本文档中(连同其他几个单词/文本),并使用 IO reader/substrings/BufferedReader 将其作为变量读取。对于普通读者来说,这至少在某种程度上掩盖了它,但任何了解基本 Java 的人仍然能够识别它(或者只需输入一个简单的 System.out.print(pwd))
似乎应该有更好的方法,但我还没有找到任何可行的解决方案来阻止用户打开文本文档/conf 文件并读取密码。我想保持连接完全自动化,所以不想提示用户输入密码。 对如何实现这一点的回应将不胜感激!
我是一名(主要是自学成才的)学生,在 Java 方面实践经验有限,如果我错过了一个相当明显的解决方案,敬请见谅。
【问题讨论】: