我可以使用Java EE webapp中的Windows身份验证连接到SQL Server吗?
-
03-07-2019 - |
题
我目前正在研究如何使用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访问数据库。
解决方案
我不认为可以将用户凭据从浏览器推送到数据库(这是否有意义?我认为没有)
但是如果您想使用运行Tomcat的用户的凭据连接到SQL Server,那么您可以使用Microsoft的JDBC驱动程序。 只需像这样构建JDBC URL:
jdbc:sqlserver://localhost;integratedSecurity=true;
将相应的DLL复制到Tomcat的bin目录(随驱动程序提供的sqljdbc_auth.dll)
其他提示
看看
http://jtds.sourceforge.net/faq.html#driverImplementation
jTDS使用的网址格式是什么?
jTDS的网址格式为:
jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
... 域 指定要进行身份验证的Windows域。如果提供了用户名和密码,则jTDS使用Windows(NTLM)身份验证而不是通常的SQL Server身份验证(即提供的用户和密码是域用户和密码)。这允许非Windows客户端登录到仅配置为接受Windows身份验证的服务器。
如果域参数存在但没有提供用户名和密码,则jTDS使用其原生的单点登录库并使用记录的Windows用户凭据登录(为此工作,显然需要在Windows上,登录到域,并且还安装了SSO库 - 请参阅有关如何执行此操作的分发中的README.SSO。
这实际上对我有用:
根据jtdsd发行版附带的README.SSO:
为了使Single Sign On正常工作,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
除非你有一些非常令人信服的理由,否则我建议放弃MS JDBC驱动程序。
相反,请使用 jtds jdbc驱动程序。阅读jtds发行版中的README.SSO文件,了解如何配置单点登录(本机身份验证)以及将本机DLL放在何处以确保它可以由JVM加载。
我遇到使用Windows身份验证连接到MS SQL 2005的问题。我能够在这个和其他论坛的帮助下解决这个问题。这是我做的:
- 安装JTDS驱动程序
- 请勿使用“domain =” jdbc中的属性:jtds :: // [:] [/] [; = [; ...]] string
- 在网络服务器计算机上的c:\ windows \ system32目录中安装ntlmauth.dll(不需要注册dll)。
- 将Apache Tomcat服务的登录标识更改为可以访问SQL数据库服务器的域用户(用户无需访问dbo.master)。 醇>
我的环境: 在Windows 2003上使用MS SQL 2005后端托管Apache Tomcat 6的Windows XP clinet