【问题标题】:OSGi: how to securely share connection between bundlesOSGi:如何在包之间安全地共享连接
【发布时间】:2015-10-18 09:38:39
【问题描述】:
我正在尝试开发一种基于 OSGi (Apache Felix) 的 java 软件,不同公司的不同开发人员可以开发不同的模块(可能包含多个 jar 文件)。
问题是:我想知道我应该如何为这些模块提供数据库连接。如果我在模块之间共享相同的用户凭据,它们可能会意外或故意使用彼此的表或数据,由于信息隐私,应该避免这种情况。或者如果我强制每个模块与自己的用户凭据建立自己的连接,那么就会有很多连接。
注意:我使用 mariadb 作为后端。
我知道这个问题不是 OSGi 特定的问题。我想知道是否有人遇到过这样的问题并且已经证明了这种情况的解决方案(我只描述了我的开发环境)。
任何想法,
谢谢
【问题讨论】:
标签:
java
database
osgi
mariadb
osgi-bundle
【解决方案1】:
首先,您的多租户问题不是任何系统(无论是否是 OSGi)都可以解决的问题。因此,您需要自己处理这个问题。如果您想通过 JPA 连接到数据库,大多数 OSGi 应用程序仍然使用数据源。通常这些数据源被注册为 OSGi 服务。
回到您的多租户问题,您应该确保每个人都有另一个数据源,并在您的应用程序中使用该数据源。例如,确保每个租户都有自己的配置,因此接收到您自己的配置中配置的数据源。这样,您可以确保每个租户彼此分开。
【解决方案2】:
OSGi 无法达到此场景所需的安全级别。 OSGi 框架旨在表示单个逻辑应用程序。如果 bundle 存在于同一个 JVM 和 OSGi 框架中,那么很难防止数据泄露,尤其是针对坚定的攻击者。
您至少需要隔离进程,并将这些进程作为单独的用户 ID 运行。