最初,在阅读了关于这个主题的书籍之后,我坚信用于从servlet处理数据库的算法 如下: 创建连接 - >连接到数据库 - >形成一个请求 - >将请求发送到数据库 - >获取查询结果 - > 处理它们 - >关闭连接 - >好。
现在,通过更好地理解实践方面,我意识到没有人这样做,一切都发生了 根据以下算法的连接池:
初始化servlet - >创建连接池 - >请求来自用户 - >从游泳池免费连接 - > 形成一个请求 - >将请求发送到数据库 - >获取查询结果 - >处理它们 - >将连接返回到 游泳池 - >好。
现在我有这个问题: 我们有100个用户,他们分为10组,每组都有自己的用户名和密码来连接数据库。 而且,每个组可能对数据库具有不同的权限。 在这种情况下我该如何使用连接池? 如果我理解正确,一个池只不过是一组具有单一登录名和密码的类似连接。 在这里,我有10对用户名/密码。看起来我在这种情况下无法使用池。我该怎么办?
答案 0 :(得分:2)
使用10个连接池,每组一个。
答案 1 :(得分:1)
如果您正在使用servlet,我假设一些前端屏幕将是10个最终用户组将看到的内容? 每个用户组的功能是否都不同,授权权限由servlet控制?
在这种情况下,数据库连接对所有人来说都是相同的。为什么代码实际上需要单独的数据库连接权限?他们是否完全使用单独的模式,在这种情况下,您需要单独的连接?
答案 2 :(得分:1)
通常的方法是三层方案,其中servlet使用专用的DB用户帐户连接到数据库,并代表用户完成所有工作。在这种情况下,访问控制留给servlet,DB将只执行servlet要求的任何操作。此专用帐户需要能够访问所有用户的数据。
这种方法确实存在缺陷,特别是如果您已经拥有管理数据库中用户权限的文化/基础结构。如果要保留这一点,则必须为每个用户组配置单独的池,除非组的数量是固定的并且事先已知,否则无法通过简单(基于文件)配置完成,或者放弃池并希望DB具有足够快的连接速度。