55

我目前正在研究如何使用 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 身份验证以访问 webapp,这正是我正在寻找的,除了我想将该令牌传递给 SQL Server 以访问数据库。

4

5 回答 5

77

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

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

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

并将相应的DLL复制到Tomcat的bin目录下(驱动提供的sqljdbc_auth.dll)

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

于 2008-12-10T15:23:02.570 回答
26

看着

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

jTDS 使用的 URL 格式是什么?

jTDS 的 URL 格式为:

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

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

如果域参数存在但没有提供用户名和密码,jTDS 使用其本地单点登录库并使用已登录的 Windows 用户凭据登录(为此,显然需要在 Windows 上登录一个域,并且还安装了 SSO 库——请参阅发行版中的 README.SSO,了解如何执行此操作)。

于 2009-04-29T06:29:11.380 回答
7

这实际上对我有用:

根据 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
于 2012-01-12T14:42:43.030 回答
5

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

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

于 2008-10-04T21:42:02.770 回答
3

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

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

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

于 2009-12-17T01:03:59.077 回答