【问题标题】: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 读取用户并使用仅读取方法执行接口。
谢谢
【问题讨论】:
标签:
java
mysql
apache
spring
ibatis
【解决方案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)。