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

Java 在使用JDBC时更改DB2的会话用户,java,linux,jdbc,db2,Java,Linux,Jdbc,Db2,我在Linux上有DB210.1,我使用Kerberos身份验证连接到它。问题是,我的用户没有权限执行这些操作,所以我需要使用“SET SESSION\u user=otheruser”模拟另一个用户 如果我使用像DBArtisan这样的客户机,这很好,但是我需要使用JDBC来完成这项工作,但它似乎不起作用。我尝试在每次创建连接时执行查询,我可以查询寄存器的值,并且它已更改,但是如果我尝试查询我的用户无权访问但会话用户有权访问的表,我仍然会出错 有什么想法吗?通常,服务器范围的数据库连接池是由具

我在Linux上有DB210.1,我使用Kerberos身份验证连接到它。问题是,我的用户没有权限执行这些操作,所以我需要使用“SET SESSION\u user=otheruser”模拟另一个用户

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


有什么想法吗?

通常,服务器范围的数据库连接池是由具有DBA决定的适当权限的特定用户创建的。为什么不直接向DBA请求为该用户提供适当的授权?这将是一种“友好”的方法,而不是试图通过一些java代码来规避他们的权限策略,如果他们知道这一点,他们可能会不喜欢…

我从未使用过DB2,但通过一点谷歌搜索,我发现:

特殊寄存器=特殊寄存器名=特殊寄存器值,…特殊寄存器名=特殊寄存器值

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数据服务器驱动程序设置的特殊寄存器 对于JDBC和SQLJ连接属性,如果设置特殊寄存器 使用
specialRegisters
在URL字符串中输入值,您还可以设置该值 在
java.util.Properties
对象中使用以下形式的
getConnection
,将特殊寄存器设置为URL中的值 绳子

由于
SESSION\u USER
是一个特殊的寄存器,这似乎意味着您需要将它与您的连接属性一起指定为

specialRegisters=SESSION_USER=otheruser;
在JDBCURL或属性中


但是,由于我从未使用过DB2,我不知道这是否是实际的解决方案。

问题是,我的Kerberos用户不应该拥有这些权限。我必须申请一个权限来模拟这个“其他用户”来运行DB查询。“我仍然会出错”——能告诉我们什么类型的错误吗?