需复制对应版本的mssql-jdbc_auth-*.x64.dll到System32(64位系统)或SysWOW64(32位Java),并在DBeaver驱动属性中设置integratedSecurity=true、authenticationScheme=nativeAuthentication,且不填用户名密码。

“This driver is not configured for integrated authentication”怎么破
这是 DBeaver 启用 Windows 身份验证时最典型的报错,根本原因不是连接参数错了,而是 JDBC 驱动缺了认证“插件”——mssql-jdbc_auth-*.x64.dll。Java 本身不支持 Windows SSPI 认证,必须靠这个 DLL 桥接系统登录凭据。
常见错误现象包括:
- 测试连接时弹窗提示 “The driver is not configured for integrated authentication”
- 日志里出现
mssql-jdbc_auth-13.2.0.x64 load failed或java.lang.UnsatisfiedLinkError - 即使勾选了 “Integrated Security”,仍被要求输用户名密码
实操建议:
- 务必从微软官方 GitHub releases 页面下载对应 JDBC 版本的完整 zip 包(如
sqljdbc_13.2.0.0_chs.zip),不要只下 jar - 解压后进入
auth/x64/目录,找到mssql-jdbc_auth-13.2.0.x64.dll(版本号需与你用的mssql-jdbc-*.jar严格一致) - 把这个 DLL 复制到
C:\Windows\System32\(64 位系统)或C:\Windows\SysWOW64\(32 位 Java 进程)——别放错目录,否则 JVM 找不到
DBeaver 驱动设置里该填什么参数
光放对 DLL 不够,JDBC URL 和驱动属性也得对上。DBeaver 默认生成的连接串往往漏掉关键开关,导致集成认证被忽略。
使用场景:SQL Server 实例启用 Windows 身份验证,且你当前登录 Windows 的账号有数据库访问权限。
实操建议:
- 新建 SQL Server 连接时,在 “Main” 标签页填好服务器名(如
localhost或MYPC\SQLEXPRESS),**Database** 填目标库名(不能留空) - 切到 “Driver properties” 标签页,手动添加两项属性:
•integratedSecurity→ 值设为true
•authenticationScheme→ 值设为nativeAuthentication(旧版驱动可能叫JavaKerberos,但推荐用 native) - **不要勾选 “Save password” 或填任何用户名/密码字段**,否则 DBeaver 会强制走 SQL 登录模式
- 如果连的是命名实例(如
SQLEXPRESS),确保 SQL Server Browser 服务已启动,否则端口协商失败
为什么复制 DLL 到 System32 还是报错
DLL 放对位置只是前提,真正卡住的往往是进程位数和 JVM 架构不匹配。DBeaver 自带 JRE 是 64 位,但如果你手动替换了 JRE 或用了系统全局 Java,就容易出问题。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
性能 / 兼容性影响:
- 32 位 Java 进程无法加载 64 位 DLL,反之亦然 —— 查看 DBeaver 启动日志里的
sun.arch.data.model=64确认位数 - 某些安全策略(如组策略禁用 DLL 加载、杀软拦截)会导致
load failed但无明确提示 - JDBC 驱动版本与 SQL Server 版本不兼容(如用 JDBC 12 连 SQL Server 2022 新特性)可能静默降级认证方式
实操建议:
- 在 DBeaver 安装目录下打开
dbeaver.ini,确认-vm指向的是 64 位 JDK(路径含jdk-xx.x.x且非Program Files (x86)) - 临时关闭杀软/EDR,用管理员权限运行 DBeaver 测试一次
- 如果公司域环境较复杂,尝试在连接 URL 末尾加
;domain=YOURDOMAIN(注意不是 workgroup)
连上了但查不了表?权限和上下文要注意
集成认证成功 ≠ 数据库可操作。Windows 账号能登录 SQL Server,不代表它在目标数据库里有 db_datareader 或其他角色。
容易踩的坑:
- 连接串里没指定
database,默认连到master,而你的账号在master可能只有public角色,执行SELECT * FROM sys.tables都被拒 - SQL Server 实例启用了“强制加密”,但 DBeaver 没配 SSL —— 此时会静默切换回 SQL 认证失败,而不是报 SSL 错误
- Windows 账号是本地账户(非域账户),而 SQL Server 设置了“仅允许域账户登录”(通过登录策略或防火墙规则)
实操建议:
- 首次连接时,**Database 字段必须填一个你确定有权限的库名**(比如
tempdb或你自己的库),不要依赖默认值 - 在 “Driver properties” 中补上
encrypt=true和trustServerCertificate=true(开发环境临时用,生产请配真实证书) - 用 SSMS 以同一 Windows 账号登录,执行
SELECT USER_NAME(), ORIGINAL_LOGIN(),对比返回值是否一致 —— 不一致说明认证链被代理或重写过
最常被忽略的一点:DLL 文件名里的版本号必须和 JDBC jar 完全一致,差一个小数点都会加载失败;而且这个 DLL 只在 Windows 上生效,Mac/Linux 用户想用集成认证得换 Kerberos 方案,不是复制文件能解决的。










