连接池有什么用处,有害吗?

时间:2012-03-15 11:40:44

标签: java hibernate database-connection

对于Hibernate,我们可以使用连接池来管理其内部的连接。池中的连接状态是否已打开?还是关闭了?如果连接是开放的,则可能存在安全威胁并对数据库构成威胁。

我们正在使用Oracle作为数据库 - 因此Oracle内部是否有内部机制来断开未使用的连接?

3 个答案:

答案 0 :(得分:3)

池内的连接是开放的(至少在一段时间内;取决于您的池实现,空闲连接可能会关闭)。创建和打开新的数据库连接可能很昂贵。汇集用于降低此成本。

使用连接池确实没有比没有连接池更多的安全威胁了。在任何一种情况下,您的应用程序仍具有相同级别的数据库访问权限;无论是否必须首先打开连接,都可以达到相同的损坏程度。

答案 1 :(得分:2)

汇集数据库连接的目的是拥有一组打开连接,以便每次应用程序尝试打开新连接时,池都会透明地返回已打开的连接。这比每次打开新连接要快得多。

从数据库的角度看,您的应用程序看起来像是打开但空闲的数据库连接(就像您打开SQL控制台而不运行任何查询一样)。

我不是安全专家,也不知道Oracle连接和TCP / IP堆栈有多安全。但是,应用程序之间的空闲连接保持几秒钟的事实应该不是问题。数以百万计的应用程序正在使用数据库连接池(事实上,我想不出任何应用程序使用它),我从未听说过针对它的任何攻击向量。请记住,池连接仍然是数据库授权和身份验证的主题。

考虑隧道或加密数据库连接,如果它担心你那么多(或者数据库连接是通过Internet而不是内联网。

答案 2 :(得分:-2)

所有这些问题对使用代码都是透明的。只有在您自己实施连接池时才会提出此问题。如果您使用众所周知的(例如c3p0),则无法与该问题取得联系,因为您正在对DataSource接口进行编码。

(这并不意味着这些库本身就是错误,内存泄漏或孤立的开放连接)。