如何在应用程序级别管理只读数据库连接

Posted

技术标签:

【中文标题】如何在应用程序级别管理只读数据库连接【英文标题】:How to manage read-only DB connections at an application level 【发布时间】:2011-06-02 21:39:44 【问题描述】:

我们正在使用 Java/Spring/Ibatis/mysql。这些技术有没有办法在应用程序级别管理只读连接。我希望在拥有只读 MySql 用户的基础上增加一层额外的保护。如果 BasicDataSource 或 SqlMapClientTemplate 为只读连接提供配置,那就太好了。否则,我似乎只能使用 MySql 读取用户并使用仅读取方法执行接口。

谢谢

【问题讨论】:

【参考方案1】:

例如Connection#CreateStatement可以带参数

statement = connection.createStatement
(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

【讨论】:

【参考方案2】:

BasicDataSource 有一个名为 defaultReadOnly 的属性将其设置为只读。你可以使用它。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://$db.host:5432/$db.name"/>
    <property name="username" value="$db.username"/>
    <property name="password" value="$db.password"/>
    <property name="defaultReadOnly" value="true"/>
</bean>

http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/BasicDataSource.html

【讨论】:

【参考方案3】:

尝试获取底层的java.sql.Connection对象和setReadOnly(true)

【讨论】:

以上是关于如何在应用程序级别管理只读数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 中查找模式名称?当您使用只读用户在 sql 会话中连接时

api链接oracle数据库提示数据库只读

为啥这个 Hibernate MySQL 连接是只读的?

应用程序意图 = 只读 SQL Server 连接错误

如何动态更改EF的DBContext的连接字符串

如何动态更改EF的DBContext的连接字符串