【问题标题】:How to set a role in DataSource from Spring如何在 Spring 的 DataSource 中设置角色
【发布时间】:2011-03-13 00:08:11
【问题描述】:

我必须使用默认角色,以便在定义和连接数据源后,该角色将允许我使用选择语句。我知道这有点奇怪,但出于安全考虑,我必须这样做。所以这是我 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>

一切都很好,我可以连接到数据源,但我还需要告诉数据库所有查询都将通过此角色进行,以便我拥有选择权限和内容: 对于命令提示符,我这样做:

set role ROLE_ACCESS_SELECT;

在执行sql命令之前不知道怎么设置。

请指教。

【问题讨论】:

    标签: spring jdbc datasource


    【解决方案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

    【讨论】:

    • axtavt 的建议更好,因为它不需要任何额外的编码...我认为您应该将他的回复标记为答案...
    • @HansWesterbeek:Enrique 的(自我)答案基本上是 axtavt 所说的更好版本(它具有正确的合成器),它向您展示了如何根据需要以编程方式设置它。 +1
    【解决方案2】:

    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>
    

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2015-05-25
      • 2020-12-24
      • 2016-10-03
      • 1970-01-01
      • 2017-01-31
      • 2011-07-20
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多