是否可以通过Java EE webapp使用Windows身份验证连接到SQL Server?

时间:2020-03-06 15:04:55  来源:igfitidea点击:

我目前正在研究如何使用Windows身份验证而不是SQL Server身份验证从Java EE Web应用程序连接到SQL Server数据库。我正在从Tomcat 6.0上运行此应用程序,并正在使用Microsoft JDBC驱动程序。我的连接属性文件如下所示:

dbDriver              = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbUser                = user
dbPass                = password
dbServer              = localhost:1433;databaseName=testDb
dbUrl                 = jdbc:sqlserver://localhost:1433

使用SQL Server身份验证时,以这种方式连接到SQL Server数据库的问题为零。

有什么方法可以检索用户的Windows身份验证的凭据并将该身份验证用于SQL Server?

更新:我知道在ASP.net中有一种方法可以设置Windows身份验证以访问Web应用程序,这正是我要寻找的,除了我希望将该令牌传递给SQL Server以便访问数据库。

解决方案

除非我们有一些令人信服的理由不建议这样做,否则建议我们放弃MS JDBC驱动程序。

而是使用jtds jdbc驱动程序。阅读jtds发行版中的README.SSO文件,以了解如何配置单点登录(本地身份验证)以及将本机DLL放置在何处以确保可以由JVM加载它。

我认为没有人可以将用户凭据从浏览器推送到数据库(这有意义吗?我认为不是)

但是,如果要使用运行Tomcat的用户的凭据连接到SQL Server,则可以使用Microsoft的JDBC驱动程序。
像这样构建JDBC URL:

jdbc:sqlserver://localhost;integratedSecurity=true;

并将适当的DLL复制到Tomcat的bin目录(驱动程序随附的sqljdbc_auth.dll)

MSDN>使用JDBC驱动程序连接到SQL Server>构建连接URL

看着

http://jtds.sourceforge.net/faq.html#driver实施

jTDS使用的URL格式是什么?

jTDS的URL格式为:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

...
领域
指定要在其中进行身份验证的Windows域。如果存在,并且提供了用户名和密码,则jTDS使用Windows(NTLM)身份验证,而不是通常的SQL Server身份验证(即,提供的用户和密码是域用户和密码)。这允许非Windows客户端登录到仅配置为接受Windows身份验证的服务器。

如果存在domain参数,但未提供用户名和密码,则jTDS使用其本机"单点登录"库并使用登录的Windows用户的凭据登录(要正常工作,显然必须在Windows上登录)一个域,并且还安装了SSO库-有关此操作,请咨询发行版中的README.SSO)。

我在使用Windows身份验证连接到MS SQL 2005时遇到问题。在这个论坛和其他论坛的帮助下,我得以解决了这个问题。这是我所做的:

  • 安装JTDS驱动程序
  • 不要在jdbc:jtds :: // [:] [/] [; = [; ...]]字符串中使用" domain ="属性
  • 在Web服务器计算机上的c:\ windows \ system32目录(无需注册dll)中安装ntlmauth.dll。
  • 将Apache Tomcat服务的登录身份更改为具有SQL数据库服务器访问权限的域用户(该用户不必具有dbo.master的访问权限)。

我的环境:
Windows XP clinet在Windows 2003上托管带有MS SQL 2005后端的Apache Tomcat 6