是否可以通过Java EE webapp使用Windows身份验证连接到SQL Server?
我目前正在研究如何使用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