繁体   English   中英

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

[英]Change the session user for DB2 while using JDBC

我在Linux上具有DB2 10.1,并且使用Kerberos身份验证连接到它。 问题是我的用户无权执行操作,因此我需要使用“ SET SESSION_USER = otheruser”模拟其他用户。

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

有任何想法吗?

我从未使用过DB2,但是经过一番搜寻之后,我进入了以下页面

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数据服务器驱动程序的JDBC和SQLJ Connection属性设置的特殊寄存器,如果您使用specialRegisters在URL字符串中设置了特殊寄存器值,并且还使用以下命令在java.util.Properties对象中设置了该值。以getConnection形式,特殊寄存器设置为URL字符串中的值。

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

specialRegisters=SESSION_USER=otheruser;

要么在JDBC URL中,要么在属性中。

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

通常,服务器范围的数据库连接池是由具有DBA决定的适当权限的特定用户创建的。 您为什么不只是向您的DBA请求该用户的适当拨款? 这将是一种“亲切”的方法,而不是尝试通过一些Java代码来规避其权限策略,如果他们知道的话,他们可能会不喜欢...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM