2012-04-28 97 views
0

实际上从Java类型4 DB连接我连接到Oracle数据库是这样的:在java中加密数据库用户名和密码?

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

任何帮助,请

+0

这个方向的一个简单的第一步可能是将它们硬编码到源代码并将它们移动到外部文件中。 – Thilo 2012-04-28 08:08:08

+0

如果您问这个问题,您可能会遇到问题。如果您担心最终用户抓取您的数据库配置,请制作一个API。否则,加密所有你想要的,但用户可以通过嗅探来获取数据。 – Corbin 2012-04-28 08:08:55

+0

@Thilo请你详细说明这个概念,以便我可以知道如何转移到外部文件? – saroj 2012-04-28 08:37:16

回答

1

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

的API基本上是你的数据库,你不拥有控制权的应用程序之间的中间层。例如,facebook不是允许直接访问他们的数据库,而是允许开发人员通过API访问他们的数据。这意味着应用程序可以被认证(因此意味着他们可以负责),并且您可以明确地控制应用程序可以查看和不能查看和编辑的内容。基本上,通过一个API,你可以保护你的数据库,同时跟踪谁在做什么(虽然保护方面通常是主要的)。

我必须说,有时候,如果你信任使用应用程序的人,不用担心它。例如,如果你在一个有能力,善意的人的小公司工作,那么允许应用程序直接连接到数据库可能是安全的。

如果您要将程序发布给公众,或者一些您不完全信任的人,那么无论采取何种预防措施,您都不应允许直接访问。

假设您确实弄清楚如何加密您的凭证。在某些时候,您仍然必须建立连接。如果用户抓取解密/连接代码,建立连接,然后在其后面插入自己的代码,现在会发生什么?突然他可以访问你的数据库。使用API​​,最糟糕的情况是,他可以窃取API密钥,并且具有有限的,可追踪的,轻松可更换的访问权限。此外,如果您允许访问API,则只允许用户执行您希望他们执行的操作。最糟糕的情况是,如果他确实知道如何直接使用API​​,他所能做的就是程序允许他做什么。

+0

+1 corbin为您有用的答案,但我应该使用哪个API?是的,如果有人可以知道如何直接使用API​​,那么他可以通过进入我的数据库来做任何事情,我该如何防止它?任何想法 – saroj 2012-04-28 09:38:45

+0

“我应该使用哪个API?”你做的那个。除非你连接的数据库已经有一个应用程序运行,它提供了一个API(如果它是一个自定义模式,它不会)。 “如果有人能够直接知道如何使用API​​,那么他可以通过进入我的数据库来做任何事情”。否。API提供有限的访问权限。例如,StackOverflow API允许用户使用他们的凭证进行连接,然后他们可以访问关于近期帖子,声誉等的各种信息。但是,stackoverflow API不允许在其他一些事情中发布问题 – Corbin 2012-04-28 09:43:31

3

我不知道的任何方式做那。

但我也看不出有什么这样做会实现。当然,用户名和密码没有清楚地显示出来,但是一个能够访问这些加密字符串的坏人可以像你的程序那样使用它们。

+0

确定stephen,但有人可以从加密的用户和密码知道真正的用户名和密码?当人们通过Java应用程序登录时,如何保护我的数据库? – saroj 2012-04-28 09:36:51

+0

我无法理解“但一个能够访问这些加密字符串的坏人可以像你的程序一样使用它们。”这是什么意思?您如何详细阐述某人如何访问我的数据库? – saroj 2012-04-28 10:41:55

+0

@saroj - *“但是如何有人可以从加密的用户和密码知道真实的用户名和密码?”*。他们不需要。他们只是使用加密的用户名/密码......就像程序一样。 – 2012-04-28 11:26:07

0

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

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

相关问题