如何在Spring中设置DataSource中的角色

时间:2010-07-07 19:26:58

标签: spring jdbc datasource

我必须使用默认角色,以便在定义和连接数据源之后,该角色将允许我使用select语句。我知道这有点奇怪,但出于安全考虑,我必须这样做。所以这是Spring的applicationContext.xml中的代码:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" />
    <property name="url"
            value="jdbc:db2://host_name:Port/DB_NAME:INFORMIXSERVER=SERVER_NAME;DELIMIDENT=y;" />
    <property name="username" value="user" />
    <property name="password" value="password" />
    <property name="minIdle" value="2" />
</bean>

一切都很好我可以连接到数据源但是我还需要告诉数据库所有查询都将通过这个ROLE,这样我就有了选择权限和东西: 对于命令提示符,我这样做:

set role ROLE_ACCESS_SELECT;

在执行sql命令之前,但不知道如何在此处设置它。

请建议。

2 个答案:

答案 0 :(得分:6)

DBCP的BasicDataSource允许您传递在连接初始化期间执行的SQL语句。像这样:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close">
    <property name = "connectionInitSqls">
        <list><value>set role ROLE_ACCESS_SELECT</value></list>
    </property>
    ...
</bean>

答案 1 :(得分:1)

没关系,我已经解决了这个问题。感谢所有看过我帖子的人,解决方案是这样的:

minIdle 属性后添加此行:

<property name="initSQLCommands">
            <list>
                <value>SET ROLE ROLE_WEB_OPERATORS</value>
            </list>
        </property>

并定义一个类,如:

public class ExtendedBasicDataSource extends BasicDataSource {
    public void setInitSQLCommands(List<String> initSQLCommands) {
        this.initSQLCommands = initSQLCommands;
        setConnectionInitSqls(initSQLCommands);
    }

}

在Spring的ApplicationContext.xml中定义数据源bean时,使用该bean代替 org.apache.commons.dbcp.BasicDataSource