保密秘密信息

时间:2014-03-08 06:23:01

标签: java security

所以,我正在编写一个密码验证函数,从数据库加载用户名和密码,但我无法弄清楚如何将数据库用户名和密码保留在代码之外。

String user = "username";//database username, not username to verify
String password = "password";//my password, not users password to check
String url = "jdbc:mysql://databaseurl:3306/table"; 
//i want this hidden somehow

我可以从文件加载它,但人们可以只读取文件。

显然,我不希望人们访问数据库并阅读秘密信息。我应该怎么做呢?

编辑:我要问的是,我如何保护我的 数据库凭据。其他人不应该访问数据库

例如,您可以反编译jar并读取上面的行,并使用我的凭据访问我的数据库。 (使用诸如jd-gui之类的程序)

4 个答案:

答案 0 :(得分:2)

使用密码加密。 如果应用程序在J2EE容器内运行,请使用标准工具

Look at sample for Jboss container

答案 1 :(得分:0)

如果您要让用户直接访问数据库,为什么不只是将用户/密码传递给数据库用户的实际用户名/数据库?

通常在安全系统中,数据库不会直接暴露给用户。用户将查询传递给某个系统,然后该系统执行身份验证,然后如果pass将查询传递给数据库。

换句话说,如果您依赖于隐藏数据库登录凭据作为访问数据库的障碍,那么您依靠客户端对实际查询数据库进行身份验证,这很糟糕, 馊主意。一旦您的数据库的登录凭据被泄露,您的整个安全方案现在都已失败。

答案 2 :(得分:0)

您可以将数据库详细信息保存在

  

属性文件/数据库

。它是一种抽象层。在该属性文件/数据库中,您提供了一些不同的密钥,以便在访问数据库时,从属性文件/数据库中获取密钥/列并构造URL信息。

答案 3 :(得分:0)

使用带有正确签名证书的PKI交换来保护您的身份验证和授权服务(如果出现问题,可以撤销它,当然可以撤销)。

一个例子是ws-security(SOAP扩展),但是如果你需要使用REST,你就会遇到传输级别的安全问题(保护你与HTTPS的连接)。

您可能希望在http://security.stackexchange.com阅读更多富有洞察力的评论,而不是“将其存储在属性文件中。