java模拟使用windows身份验证连接到sql server

Posted

技术标签:

【中文标题】java模拟使用windows身份验证连接到sql server【英文标题】:java impersonation to connect to sql server using windows authentication 【发布时间】:2009-04-29 04:40:19 【问题描述】:

现在我有以下使用经典 asp 和 visual basic 6 构建的架构

我有一个用 VB6 开发的 COM+ 组件,它连接到数据库。我通过一个配置了集成安全性的 .udl 文件来设置 DB conf。

在 Web 服务器 (IIS) 上,我使用 com+ 管理器注册组件,并将其配置为在帐户名下运行,例如 mydomain\appAccount...

在 sql 2005 中,我给予 mydomain\appAccount 适当的权限

从asp,我只是用server.createobject的组件...

我想用java开发一个类似的解决方案,问题如下:

有可能吗?

如何配置域帐户以连接到 sql server 2005 db?

我应该将 db conf 存储在哪里?我应该在哪里配置域帐户?在 tomcat / jetty 配置中?

我希望解决方案尽可能简单直接(我尽量避免使用 glassfish 或 jboss 之类的东西)

嗯,非常感谢...

【问题讨论】:

【参考方案1】:

您需要做的是确保 Tomcat JVM 进程正在由具有与数据库的受信任连接的用户执行。

然后您需要在 Tomcat 中配置数据源,按照Bhushan's answer。

以下 MSDN 文章详细介绍了如何设置数据源以使用集成安全性:

http://msdn.microsoft.com/en-us/library/ms378428.aspx

【讨论】:

非常感谢,我仍然无法接受答案,因为我没有时间尝试,但我希望我能尽快完成......【参考方案2】:

所以这是一个非常棘手的问题,我现在也遇到了同样的问题。我还没有解决应用服务器中的模拟问题,但我的团队正在接近。

到目前为止,我们已经成功地使用 Kerberos 针对域控制器对用户进行身份验证。 SourceForge SPNEGO 和 Spring Security Kerberos Extension 在这方面都非常有帮助。在连接到 SQL Server 时,我们还能够成功模拟运行 Java 应用程序的进程。真正的问题是通过委托进行模拟,因为它要求您获得可以委托给另一个服务的 Kerberos 票证。这是我们目前正在处理的问题。

如果您要在 SQL Server 中模拟用户,则必须使用 NTLM 或 Kerberos 来完成。 Kerberos 提供了最好的安全性,老实说,我们甚至都懒得尝试使用 NTLM。有两个 JDBC 驱动程序(我知道)允许您使用域帐户连接到 SQL Server:jTDS 和 DataDirect JDBC。 jTDS 是一个 Type-2 JDBC 驱动程序,这意味着它依赖于本地库来为用户获取凭据。 jTDS 只会模拟运行该进程的用户,并且不允许您模拟其他帐户(此外,它只能在 Windows 上执行此操作)。 DataDirect 驱动程序(商业)是一个 Type-4 驱动程序,这意味着它是一个纯 Java 实现(并且将在 *nix 上工作)。这是我们正在使用的驱动程序,它工作得很好。

如果我的解决方案有效,我会发布它,因为我认为社区中的很多人都在这个问题上受到伤害。

祝你好运!

【讨论】:

【参考方案3】:

查看此 tomcat 文档以了解如何配置数据源。 http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

【讨论】:

以上是关于java模拟使用windows身份验证连接到sql server的主要内容,如果未能解决你的问题,请参考以下文章

我可以从 Java EE webapp 使用 Windows 身份验证连接到 SQL Server 吗?

使用 Windows 身份验证将我的 Sql Server 2008 数据库连接到我的 Java 项目

通过***通过Windows身份验证连接到sql [关闭]

使用 Windows 身份验证连接到 SQL Server

在IIS7中通过PHP连接到SQL SERVER 2008(使用Windows身份验证)?

如何使用 Windows 身份验证通过 sqlalchemy 连接到 SQL Server?