加密java中的数据库用户名和密码?

时间:2012-04-28 07:49:21

标签: java database oracle encryption jdbc

实际上来自java的类型4数据库连接我正在连接到oracle数据库,如下所示:

在dbconnection.java中我写了下面的内容:

  Class.forName("oracle.jdbc.driver.OracleDriver"); 
   con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:database host name","database user name", "database user password"); 
  return con;

是否有任何方法如何在java类dbconnection.java中以加密形式编写这3个字段(数据库主机,数据库用户名,数据库用户密码),如下所示:

  Class.forName("oracle.jdbc.driver.OracleDriver"); 
   con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:wrtwtr#$%$_rfwrw","regfwerfgwf", "%%5frfr^&%$%4"); 
  return con;

在数据库连接期间,这些加密字段将被解密,并以实际名称连接到oracle数据库

然后在servlet中我打电话给:

  dbconnection db= new dbconnection();

请帮助

3 个答案:

答案 0 :(得分:3)

我不知道有任何办法。

但我也看不出这会做什么。当然,用户名和密码没有明确显示,但是有权访问这些加密字符串的坏人能够以与程序相同的方式使用它们。

答案 1 :(得分:1)

您应该提供一种安全的方式来允许外部控制的应用程序(或应用程序实例)访问您的数据库,而不是试图隐藏您的连接详细信息。

API基本上是数据库与您无法控制的应用程序之间的中间层。例如,Facebook允许开发人员通过API访问他们的数据,而不是允许直接访问他们的数据库。这意味着可以对应用程序进行身份验证(因此意味着他们可以负责),并且您可以明确控制哪些应用程序可以查看和编辑哪些应用程序。

基本上,通过API,您可以保护您的数据库,同时跟踪谁在做什么(虽然保护方面通常是主要的吸引力)。

我必须说,尽管如此,如果你相信使用该应用程序的人,那么更容易不用担心它。例如,如果您在一个有能力,有意义的人的小公司工作,那么允许应用程序直接连接到数据库可能是安全的。

如果您正在向一般公众发布您的程序,或者您不完全信任的大量人员,那么无论采取何种预防措施,您都不应允许直接访问。

假设您确实了解如何加密凭据。在某些时候,您仍然必须建立连接。如果用户抓取解密/连接代码,进行连接,然后在其后插入自己的代码,会发生什么?突然他可以访问你的数据库了。使用API​​,最糟糕的情况是,他可以窃取API密钥,并且具有有限的,可追踪的,易于重新访问的访问权限。

此外,如果您允许访问API,则只允许用户执行您希望他们执行的操作。最糟糕的情况是,如果他确实知道如何直接使用API​​,他所能做的只是程序允许他做的事情。

答案 2 :(得分:0)

将加密数据传递到DriverManager不是一种选择 您应该将解密的字符串传递给DriverManager。因此,您可以在某处加密用户名和密码,然后在将其传递给DriverManager之前解密 然后你会有其他问题,例如在哪里存储私钥等,但作为第一道防线,它比使用明文更好,因为我的理解是你有一些安全要求。

您没有提到您正在使用的操作系统。如果您使用的是Windows,我建议使用Windows based authentication(与数据库的连接是针对当前的Windows用户进行身份验证的。)因此无需在连接字符串中提供用户名和密码。检查Oracle是否支持此功能(仅尝试使用MS-SQL服务器。我提供的链接非常有用)  这是恕我直言的最佳选择。对于Linux,必须有相同的东西。