我在Linux上安装了DB2 10.1,并使用Kerberos身份验证连接到它。问题是我的用户没有权限做事情,所以我需要使用“SET SESSION_USER = otheruser”冒充其他用户。
如果我使用像DBArtisan这样的客户端,这可以正常工作,但是我需要使用JDBC来做这件事并且它似乎不起作用。我曾经尝试在每次创建连接时执行查询,我可以查询寄存器的值并且它已经更改,但是如果我尝试查询我的用户无权访问的表但仍然会出错会话用户。
有什么想法吗?
答案 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代码来规避他们的权限策略,如果他们知道的话他们可能不喜欢......