2008-10-03 79 views
52

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

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进行身份验证?

UPDATE:我知道在ASP.net中有一种方法来设置Windows身份验证访问webapp,这正是我所期待的,除了我想将该令牌传递给SQL Server for访问数据库。

回答

72

我不认为一个人可以把从浏览器的用户凭据到数据库(和做是有意义的?我想不会)

但是,如果你想使用的用户的凭据运行Tomcat连接到SQL Server,那么你可以使用微软的JDBC驱动程序。 刚刚建立你的JDBC URL是这样的:

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

及相应的DLL复制到Tomcat的bin目录(sqljdbc_auth.dll驱动程序提供)

MSDN > Connecting to SQL Server with the JDBC Driver > Building the Connection URL

5

除非你有一些非常有说服力的理由,否则我建议开通MS JDBC驱动程序。

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

+0

问题确实在寻找SSO(单点登录)。 – jim 2008-12-03 12:19:40

+0

@jim:如果您在Linux上基于Kerberos进行身份验证,那么您可以拥有SSO,但是我可以找到将它用于Linux上的MS SQL身份验证的唯一方法是通过DataDirect驱动程序。 – 2011-12-14 12:08:40

+0

为什么JTDS驱动程序更可取?我知道它不支持连接池,这对我来说是必不可少的。 – megaflop 2012-05-01 16:05:03

22

看看

http://jtds.sourceforge.net/faq.html#driverImplementation

jTDS使用的URL格式是什么?

为JTDS的URL格式为:

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

... 域 指定Windows域进行身份验证。如果提供目前以及用户名和密码,JTDS使用Windows(NTLM)身份验证。而不是通常的SQL Server身份验证(即提供的用户和密码是域用户和密码)。这允许非Windows客户端登录到仅配置为接受Windows身份验证的服务器。

如果域参数存在但没有提供用户名和密码,那么jTDS将使用其本机Single-Sign-On库并使用所记录的Windows用户凭证登录(为此,工作中显然需要开启Windows,登录到一个域,并且还安装了SSO库 - 请参阅关于如何执行此操作的发行版中的README.SSO)。

3

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

  1. 安装驱动程序JTDS
  2. 不要在JDBC使用 “域=” 属性:JTDS :: // [:] [/] [= [; .. 。]]字符串
  3. 在Web服务器上安装ntlmauth.dll到c:\ windows \ system32目录(不需要注册dll)。
  4. 将Apache Tomcat服务的登录身份更改为域可以访问SQL数据库服务器的用户(用户无需访问dbo.master)。

我的环境: 的Windows XP客户为例在Windows 2003上托管的Apache Tomcat 6 MS SQL 2005后端

6

这实际上对我的作品:

每随附jtdsd分布README.SSO :

为了使单点登录正常工作,jTDS必须能够加载本地SPPI库ntlmauth.dll。将此DLL放在系统路径中的任何位置(由PATH系统变量定义),并且全部设置完毕。

我把它放在我的jre/bin文件夹

我配置了一个端口专用的SQL Server实例(2302),以缓解需要有一个实例名称 - 只是我做的事情。 lportal是我的数据库名称。

jdbc.default.url=jdbc:jtds:sqlserver://192.168.0.147:2302/lportal;useNTLMv2=true;domain=mydomain.local 
相关问题