0

实际上,通过来自 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;

有什么方法可以在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();

请提供任何帮助

4

3 回答 3

3

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

但我也看不出这样做会取得什么成果。当然,用户名和密码没有清楚地显示,但是有权访问这些加密字符串的坏人将能够像您的程序一样使用它们。

于 2012-04-28T08:10:01.180 回答
1

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

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

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

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

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

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

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

于 2012-04-28T09:03:03.497 回答
0

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

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

于 2012-04-28T08:22:01.283 回答