使用JDBC时更改DB2的会话用户

时间:2014-03-13 10:38:52

标签: java linux jdbc db2

我在Linux上安装了DB2 10.1,并使用Kerberos身份验证连接到它。问题是我的用户没有权限做事情,所以我需要使用“SET SESSION_USER = otheruser”冒充其他用户。

如果我使用像DBArtisan这样的客户端,这可以正常工作,但是我需要使用JDBC来做这件事并且它似乎不起作用。我曾经尝试在每次创建连接时执行查询,我可以查询寄存器的值并且它已经更改,但是如果我尝试查询我的用户无权访问的表但仍然会出错会话用户。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我从未使用过DB2,但有一点谷歌搜索引导我this page

  

<强> specialRegisters=special-register-name=special-register-value,…special-register-name=special-register-value

     

JDBC连接的特殊寄存器设置列表。您可以   指定一个或多个特殊寄存器名称和值对。特别   寄存器名称和值对必须用逗号(,)分隔。该   最后一对必须以分号(;)结尾。例如:

    String url = 
     "jdbc:db2://sysmvs1.stl.ibm.com:5021/STLEC1" +
     ":user=dbadm;password=dbadm;" +
     "specialRegisters=CURRENT_PATH=SYSIBM,CURRENT CLIENT_USERID=test" + ";";
    Connection con = 
       java.sql.DriverManager.getConnection(url);
     

对于可以通过IBM Data Server Driver设置的特殊寄存器   对于JDBC和SQLJ连接属性,如果设置了特殊寄存器   使用specialRegisters的URL字符串中的值,您也可以设置它   使用以下形式的java.util.Properties对象中的值   getConnection,特殊寄存器设置为URL中的值   字符串。

由于SESSION_USER是一个特殊的寄存器,这似乎意味着您需要使用连接属性指定它

specialRegisters=SESSION_USER=otheruser;

在JDBC网址或属性中。

然而,由于我从未使用过DB2,因此我不知道这是否是真正的解决方案。

答案 1 :(得分:0)

通常,服务器范围的数据库连接池是由具有DBA决定的适当权限的特定用户创建的。为什么不让您的DBA为该用户提供适当的资助?这将是'#kind;&#39;方法而不是试图通过一些java代码来规避他们的权限策略,如果他们知道的话他们可能不喜欢......