【问题标题】:Make LocalSessionFactoryBean enforce read only on db connections使 LocalSessionFactoryBean 在数据库连接上强制只读
【发布时间】:2018-08-31 06:29:48
【问题描述】:

使用 spring/hibernate/C3P0 ComboPooledDataSource。我正在使用 spring 2.5、hibernate 3.3 和最新的 C3P0 进行遗留项目。

我正在使用 LocalSessionFactoryBean 实现。

我使用spring TransactionInterceptor来全局设置事务属性。

我正在添加第二个复制数据库,仅用于报告查询。这将是一个只读数据库,我想将所有连接设置为只读。

我试图创建 LocalSessionFactoryBean 的第二个实例,该实例具有引用辅助数据库的数据源。
但是,我想做的是将所有这些事务设置为只读。

我希望在 ComboPooledDataSource 数据源中有一种方法可以做到这一点。例如 apache commons BasicDataSource 有一个 readOnly 设置。 C3P0 没有。

接下来,我想在 LocalSessionFactoryBean 中可能有办法做到这一点。但没有运气找到那个。有什么想法吗?

【问题讨论】:

    标签: spring hibernate c3p0


    【解决方案1】:

    创建一个只有只读访问权限的数据库帐户。这是保证用户不能写的最好方法。为该帐户创建第二个数据源并使用它。

    尝试使用 Spring/Hibernate 执行此操作不是正确的方法。如果您使用正确的工具来完成这项工作,它将更加干净、易于理解和维护。

    【讨论】:

    • 所以本质上用户帐户应该只有选择权限?
    • 正确,不确定您在后端使用的是哪个 RDBMS,但这里有一个如何使用 MS SQL 的示例:support.symantec.com/en_US/article.HOWTO16965.html
    • 我正在使用 postgresql。我知道如何只授予选择权限。我尝试了很多复杂的解决方案。我没有想到这种使用用户限制访问的方法。非常感谢您提供这个简单而聪明的解决方案。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多