文章目录
简介
本文主要记录 java 实现 windows用户登录sqlserver遇到的一些问题与解决方法。
系统环境如下:
jdk1.8 ,sqlserver2016, Windows Server服务器
1.sqlserver client和sqlserver服务器必须在同网段。
例如:server ip 为10.194.12.xxx 。client ip为10.194.xxx
2.client和server需用同用户名密码登录
例如: server name=wcl password=123 。client name=wcl password=123 ,后面会具体讲述配置方法;
3.在java/bin、jre/bin、C:\Windows\System32目录下添加sqljdbc_auth.dll
百度网盘下载 提取码:zlyh
官网下载:sqljdbc_auth.dll
下载解压后找到sqljdbc_6.0.8112.200_chs\sqljdbc_6.0\chs\auth\x64\sqljdbc_auth.dll
注意:可使用java -version 查看JVM, x64表示64位,x86表示32位,如果电脑是64位操作系统则复制auth下的x64文件夹的文件,如果电脑是32位操作系统则复制auth下的x86文件夹的文件
1.mybatis连接设置windows认证
设置sqlserver连接为integratedSecurity=true,表示使用当前windows用户身份验证登录sqlserver数据库,如果需要使用sqlserver用户名密码登录则设置integratedSecurity=false
// windows身份认证数据库连接
<environment id="jdt">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://10.194.12.30:1433;DatabaseName=p_eoms;"/>
<property name="poolPingQuery" value="select now()"/>
<property name="poolMaximumActiveConnections" value="100"/>
<property name="poolMaximumIdleConnections" value="5"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingConnectionsNotUsedFor" value="3600000"/>
</dataSource>
</environment>
2.新增windows用户
操作步骤如下:
1.右击我的电脑>管理>所有服务器>选中服务列表中的服务器右击> 计算机管理>本地用户和组>用户>更多操作新建用户>填写用户信息>点击创建。
2.选中组>选择Administrators>右击选择属性>添加>输入数据新创建用户名>点击检查名称>确认>应用>确认
2.1 具体操作示意图如下:
2.2 新建用户:
2.3 新增组成员
3.sqlserver 增加用户
1.选中数据库服务器
2.选择安全性>登录名>新建登录名>windows身份验证>输入用户名检查确认>用户映射选择 用户映射的数据库
注意:数据库添加新用户后,数据库连接失败的话,需要重启数据库再试试。
3.1 具体操作如下:新建登录名
3.2 用户映射配置,选择映射数据库
4.windows server设置用户
4.1.win + R键 打开services.msc 找到需要设置的服务,本例中设置tomcat服务
选中Apache Tomcat8.5 服务 右击 选择属性 设置登录账户,登录账户需与上面设置的数据库用户一致。
5.windows登录sqlserver验证
# 启动数据库连接程序后执行以下sql语句。
SELECT
login_name,
Count( 0 ) user_count
FROM
Sys.dm_exec_requests dr WITH ( nolock )
RIGHT OUTER JOIN Sys.dm_exec_sessions ds WITH ( nolock ) ON dr.session_id = ds.session_id
RIGHT OUTER JOIN Sys.dm_exec_connections dc WITH ( nolock ) ON ds.session_id = dc.session_id
WHERE
ds.session_id > 50
GROUP BY
login_name
ORDER BY
user_count DESC
执行结果如图所示:admin_test为新建用户。
6.windows认证连接sqlserver bug记录
问题1: nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用
原因:server与client ip不在同网段
问题2:用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败
原因:未将ANONYMOUS 用户添加到Administrators组内。
问题3:没有集成身份验证配置驱动程序问题解决
原因:缺少 sqljdbc_auth.dll 文件
总结
以上就是今天要讲的内容,本文仅仅简单介绍了使用windows认证登录sqlserver实现过程中遇到的一些问题。
如果程序是通过Java -jar xxx.jar 方式运行,需要注册为服务运行的方式,才可以实现使用指定的windows用户认证方式登录sqlserver,或者使用匿名用户(ANONYMOUS )登录就不需要注册未服务了,只需要在windows用户组和sqlserver数据库添加ANONYMOUS用户即可。