繁体   English   中英

如何从java.sql.Connection-SQL Server DB获取用户名?

[英]How to get UserName from java.sql.Connection - SQL Server DB?

我将Weblogic和Microsoft SQL Server一起使用,并且我想使用Java代码获取连接的用户名。 该代码将返回“ dbo”而不是登录名“ sa”。

当我输入以下代码时:

 InitialContext ic = new InitialContext();
 DataSource ds = (DataSource)ic.lookup(jndiName);
 Connection connection = ds.getConnection();
 connection.setAutoCommit(false);
 System.out.println(conn.getMetaData().getUserName());

我尝试了两种选择:首先,我尝试了查询:

SELECT a.name AS Login
FROM sys.server_principals AS a
  JOIN sys.database_principals as U
     ON a.SID = U.SID
     WHERE u.name = 'dbo';

可以正确返回“ sa”,但是很遗憾,我无法在代码中使用此查询,因为我需要的用户没有管理员权限,因此无法访问这些表。

我尝试的第二个解决方案是以下代码:

Method getter = new PropertyDescriptor("user", ds.getClass()).getReadMethod();      
String value = (String)getter.invoke(ds);

但这对我也不起作用,因为我遇到以下异常:

 java.beans.IntrospectionException: Method not found: isUser
        at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:106)
        at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.thortech.xl.dataobj.rulegenerators.adpPBCASHIERCREATEDBY.CREATEDBY(adpPBCASHIERCREATEDBY.java:105)
        at com.thortech.xl.dataobj.rulegenerators.adpPBCASHIERCREATEDBY.implementation(adpPBCASHIERCREATEDBY.java:52)
        at com.thortech.xl.dataobj.rulegenerators.tcBaseRuleGenerator.run(tcBaseRuleGenerator.java:176)
        at com.thortech.xl.dataobj.rulegenerators.tcAdapterExecuter.executeRuleGenerators(tcAdapterExecuter.java:266)
        at com.thortech.xl.dataobj.util.tcPrePopulateUtility.setDataFromAdapter(tcPrePopulateUtility.java:1094)
        at com.thortech.xl.dataobj.util.tcPrePopulateUtility.prePopulate(tcPrePopulateUtility.java:389)
        at com.thortech.xl.dataobj.util.tcOrderPackages.computeProcessFormData(tcOrderPackages.java:865)
        at com.thortech.xl.dataobj.util.tcOrderPackages.createOrder(tcOrderPackages.java:428)
        at com.thortech.xl.dataobj.util.tcOrderPackages.orderPackageForUser(tcOrderPackages.java:180)
        at com.thortech.xl.dataobj.tcOIU.provision(tcOIU.java:869)
        at com.thortech.xl.dataobj.tcOIU.eventPostInsert(tcOIU.java:364)

有没有人设法找到解决方案? 如何通过数据源检索用户登录名?

谢谢

您尝试过CURRENT_USER吗?

SELECT CURRENT_USER;

有关详细信息,请参见CURRENT_USER(Transact-SQL)

也许这就是您想要的SELECT ORIGINAL_LOGIN()

暂无
暂无

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

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