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

在java中加密数据库用户名和密码?,java,database,oracle,encryption,jdbc,Java,Database,Oracle,Encryption,Jdbc,实际上,通过java的类型4 db连接,我连接到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 pa

实际上,通过java的类型4 db连接,我连接到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;
是否有任何方法可以将这3个字段(数据库主机、数据库用户名、数据库用户密码)以加密形式写入java类dbconnection.java中,如下所示:

  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();

有什么帮助吗?我不知道有什么办法


但我也不知道这样做会有什么效果。当然,用户名和密码不会以清晰的形式显示,但是有权访问这些加密字符串的坏人可以像您的程序一样使用它们。

我不知道有什么方法可以做到这一点


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

将加密数据传递给
DriverManager

您应该将解密后的字符串传递到
DriverManager
。因此,您可以在某个地方对用户名和密码进行加密,然后对其进行解密,然后将其传递给
DriverManager

然后,您可能会遇到其他问题,例如在何处存储私钥等,但作为第一种防御措施,它比使用明文要好,因为我的理解是,您有一些安全要求

你没有提到你正在使用什么操作系统。如果您使用的是Windows,我建议您使用(到数据库的连接是针对当前Windows用户进行身份验证的)。因此无需在连接字符串中提供用户名和密码。检查Oracle是否支持此功能(仅在MS-SQL server上尝试过。希望我提供的链接有用)。

这是最好的选择。对于Linux,必须有一些等效的东西。

将加密数据传递给
驱动器管理器
不是一个选项。
您应该将解密后的字符串传递到
DriverManager
。因此,您可以在某个地方对用户名和密码进行加密,然后对其进行解密,然后将其传递给
DriverManager

然后,您可能会遇到其他问题,例如在何处存储私钥等,但作为第一种防御措施,它比使用明文要好,因为我的理解是,您有一些安全要求

你没有提到你正在使用什么操作系统。如果您使用的是Windows,我建议您使用(到数据库的连接是针对当前Windows用户进行身份验证的)。因此无需在连接字符串中提供用户名和密码。检查Oracle是否支持此功能(仅在MS-SQL server上尝试过。希望我提供的链接有用)。

这是最好的选择。对于Linux,必须有类似的东西。

与其试图隐藏连接详细信息,不如提供一种安全的方法,允许外部控制的应用程序(或应用程序实例)访问数据库

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

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

但我必须说,有时候,如果你信任使用该应用程序的人,就更容易不担心它。例如,如果您在一家由有能力的、善意的人员组成的小公司工作,那么允许应用程序直接连接到数据库可能是安全的

但是,如果您将程序分发给普通公众,或者您不完全信任的一大群人,那么无论采取何种预防措施,您都不应该允许直接访问

假设您确实知道如何加密您的凭据。在某个时刻,您仍然必须建立连接。如果用户获取解密/连接代码,建立连接,然后在之后插入自己的代码,现在会发生什么?突然他可以访问你的数据库了。在最坏的情况下,有了API,他就可以窃取API密钥,并拥有有限的、可追踪的、易于撤销的访问权限


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

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

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

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

但我必须说,有时候,如果你信任使用该应用程序的人,就更容易不担心它。例如,如果你在一家有能力、善意的小公司工作