我创建一个应用程序,我需要连接到一个数据库。 数据库需要登录/密码,以便应用程序可以做的操作,如选择和插入。
在应用程序中,我需要连接到使用登录名和密码数据库中,这样的应用程序是免费做数据库的一些任务。 我的问题是:我该如何存储和使用密码连接到数据库,而暴露的密码?
我不能简单地使用哈希或加密存储密码,因为数据库必须认识到的密码(我想大多数或所有数据库必须接受密码为纯文本)。
。
。
注:连接由申请。 没有人投入去做的连接。
(编辑)有关应用程序的更多信息:它是使用servlet / JSP的Web应用程序。 该数据库是应用程序的同一台服务器上。 该应用程序的用户是完全没有权力管理默认的用户,但它可以插入/删除行,去做一些涉及表的查询和数据修改最多的事。
这样做的通常方法是外部用户名/密码的属性/ config文件这是在运行时读取(无论是否使用本机JDBC / JNDI / CDI / J2EE数据源的/ etc)。
该文件是通过由系统管理员的O / S的安全保护。
在O / S具有保护比应用程序的代码更好的工具。
您应该使用配置文件用于此。 采用弹簧与JDBC,让您的生活更轻松!
http://www.youtube.com/watch?v=f-k823MZ02Q
结帐的Spring框架和使用JDBC上述真棒教程。 关注他所有的JDBC和春季教程。 顺便说一句,他介绍了如何密码储存在配置文件和线豆等。希望这有助于。
您可以使用jasypt为encryption.And存储datasource.properties文件中的用户名和密码。
public Connection getConnection() throws IOException{
try{
BasicTextEncryptor encryptor = new BasicTextEncryptor();
encryptor.setPassword("jasypt");
Properties props = new EncryptableProperties(encryptor);
props.load( this.getClass().getResourceAsStream("datasource.properties") );
String driver = props.getProperty("datasource.driver");
String url = props.getProperty("datasource.url");
String userName = props.getProperty("datasource.userName");
String password = props.getProperty("datasource.password");
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, userName, password);
conn.setAutoCommit(false);
return conn;
} catch(ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch(SQLException e) {
e.printStackTrace();
return null;
}
}
如果它是一个Web应用程序,它部署在Java EE应用服务器上,并使用JNDI资源连接。 只有谁设置了JNDI数据资源管理员需要了解连接所需的凭据。 用户和开发者甚至不必知道他们。 只是JNDI查找名称。
这是不可能完全消除的,除了数据库所有者知道用户名和密码的人的需要,但它可以限制这些知识应用服务器所有者。
您也奉劝只是该应用程序创建单独的证书,并授予它最小访问并完成其任务所需的权限。 应该有系统表或任何其他应用程序资源的省外毫不知情。 IF DELETE权限是没有必要的,不授予它。 如果访问应该只为只读,这就是你应该授予该证书的内容。
文章来源: How to connect to a database that requires password without exposing the password?