oracle - 在 GORM 中使用不同的数据库用户

标签 oracle grails grails-orm

我正在开发一个 grails 1.3.7 应用程序,根据设计,客户希望将所有用户保持在数据库级别,因此他可以利用他的数据库在登录、权限等方面的功能。(数据库是 Oracle 10g) .

有没有办法可以将 GORM 配置为在用户登录时使用不同的用户/密码连接到数据库?诸如构建用户/密码表单并将这些凭据传递给 GORM 以连接到数据库之类的东西?

实现此方案的最佳实践是什么?

最佳答案

我不知道 grails,但它使用 Hibernate。

我的想法:

你使用 session 工厂与数据库进行交互,每个 session 工厂都有一个数据源,其中有db的url和le l/p。

因此,您需要为每个用户拥有一个 session 工厂,以便您可以使用不同的身份验证连接到数据库。我没有看到任何更简单的解决方案。

这意味着您需要使用多个数据库/模式的 Multi-Tenancy 应用程序具有相同的要求。除非您不使用不同的数据库/模式,而只是使用不同的 l/p。

看来您正在“单租户模式”下寻找 Multi-Tenancy 插件:
http://www.grails.org/plugin/multi-tenant

Single-Tenant Mode Converts the "dataSource" bean into an AOP proxy that creates a new datasource for each tenant



(最后我错了,您可以使用单个 session 工厂和“动态数据源”^^)

编辑:

http://grails.org/Multi-Tenant+Plugin+-+Single+Tenant+Database+Set+Up

The single-tenant option is a little more immature than the multi-tenant option. It inherits all datasource configuration from the default datasource in Datasource.groovy, and allows you to provide a custom datasource url per tenant. This means that you can't mix and match drivers or user/pass combos for different tenants in the same instance.



似乎最后你不能用插件做到这一点,只能改变网址......正如他们所说的那样它有点不成熟,但你也许可以为那个插件做出贡献,这样就可以改变用户/密码,或者只需检查他们是如何做到的并开发您自己的插件...

...或者也许有人已经开发了...

编辑2:

你还可以做的是:

1) 每次用户登录时,使用用户 l/p 创建一个新数据源并将其添加到数据源池(映射)
(当他注销或 session 到期时,删除该数据源)

2)当您收到用户的请求时,将此用户的 id 放在 threadlocal 中(以过滤器为例)。

3) 创建一个新的数据源实现 MultiAuthentificationDatasourceImpl,您将在其中注入(inject)数据源池,并将所有方法映射到您应该使用的数据库。例如,您的 getConnection() 方法将是:
public Connection getConnection() {
    return getDatasourceToUse().getConnection();
}

public Datasource getDatasourceToUse() {
   return datasourcePool.get( getUserIdFromThreadLocal() );
}

几乎所有方法都一样,您可以重用 getDatasourceToUse() 方法...

4) 使用 MultiAuthentificationDatasourceImpl 作为 grails 配置中的数据源

但我不知道grails,只是在Java中是可能的......

关于oracle - 在 GORM 中使用不同的数据库用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195913/

相关文章:

mysql - 选择前 3 个最多计数组 - SQL

oracle - Oracle函数中如何处理被零除的情况

sql - Oracle简单更新语句,性能差

testing - Grails - 测试 GORM 关系

mysql - 如何使用 Grails 2.0 获得可为空的约束?

oracle - Oracle中的实例连接和服务连接是什么?

grails - cloudfoundry是否支持grails针对Java 1.7编译的应用程序?

grails - 如何在Groovy中获得一组字段值?

grails - 将 Java 类注入(inject) Grails Groovy 服务

hibernate - 用于检查 hasMany 关联是否包含某些实体的 Grails/Hibernate 标准