如何在应用程序级别管理只读数据库连接
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)
。
【讨论】:
以上是关于如何在应用程序级别管理只读数据库连接的主要内容,如果未能解决你的问题,请参考以下文章