【发布时间】:2015-03-10 09:21:08
【问题描述】:
我正在开发一个 Web 应用程序,最好使用客户端凭据(Windows 用户)连接到 SQL Server。
这样做的原因是每个用户对数据库访问进行审核,并且最好基于 AD 以避免多次登录并简化管理。
应用程序在 Tomcat 7.0.57 上运行并设置了 SpnegoHttpFilter,我可以从请求中获取用户名和用户主体。我可以使用 Tomcat 的 Window 用户连接到 SQL 服务器。
但是如何使用客户端用户凭据连接到 SQL Server(当然,仅用户名是不够的)?
是否会从 DelegateServiceRequest 帮助中获取委托凭证(当前未设置)?我没有找到在 Microsoft JDBC 驱动程序中使用 GSSCredential 的任何支持(一些搜索表明 Progress DataDirect JDBC 驱动程序支持使用 GSSCredential 但我还没有找到有关如何执行此操作的任何文档,我更愿意使用免费解决方案(如果有)。
我已经搜索过这个问题的答案,但到目前为止我还没有找到任何关于如何进行的好线索,有什么想法吗?
注意:这是在公司环境中,这意味着所有用户都通过 AD 进行管理,包括对数据库的访问和 Windows 登录。
注意 2:以下解决方案似乎有效
连接字符串如下所示:
jdbc:sqlserver://<host>:<port>;databaseName=<bdname>;integratedSecurity=true;authenticationScheme=JavaKerberos;
创建连接时,代码如下:
DelegateServletRequest dsr = (DelegateServletRequest)HttpServletRequest();
GSSCredential cred = dsr.getDelegatedCredential();
try
{
Subject s = GSSUtil.createSubject(cred.getName(), cred);
return (Connection) Subject.doAs(s,
new PrivilegedExceptionAction<Object>()
{
@Override
public Object run() throws Exception
{
Connection c = null;
c = DriverManager.getConnection(url);
return c;
}
});
}
catch (PrivilegedActionException e)
{
throw new DAOException(e);
}
catch (GSSException e)
{
throw new DAOException(e);
}
【问题讨论】:
标签: java sql-server tomcat jdbc windows-authentication