Java项目连接SQL Server 2019提示dbo用户登录失败如何解决?
问题根因及排查解决步骤
1. 核心错误:误用dbo作为登录用户名
dbo是SQL Server内置的数据库架构主体,并非可直接用于身份验证的登录账户,默认映射到sa系统管理员账户或Windows管理员组,不能直接填写到连接字符串的user字段。
你修改错误数据库名仍返回登录失败的原因也在此:SQL Server的身份验证流程为先校验登录账户合法性,验证通过后才会检查数据库权限、数据库是否存在,你的请求在第一步账户校验就被拦截,所以修改数据库名不会改变报错内容。
2. 对应场景的解决步骤
- 若使用SQL身份验证登录:
- 打开SSMS,进入安全性-登录名,确认有可用的SQL身份验证账户;没有则右键新建登录名,选择SQL Server身份验证,设置密码、取消强制密码过期,在用户映射页给该账户分配
Financials数据库的访问权限,设置默认架构为dbo即可。 - 修改连接字符串的
user、password字段为你新建的SQL登录账户的用户名和密码。
- 打开SSMS,进入安全性-登录名,确认有可用的SQL身份验证账户;没有则右键新建登录名,选择SQL Server身份验证,设置密码、取消强制密码过期,在用户映射页给该账户分配
- 若使用Windows身份验证登录(即你平时SSMS用Windows账户登录的模式):
- 把连接字符串的
Trusted_Connection参数改为True,删除user和password字段,连接串调整为:
"jdbc:sqlserver://localhost:1433;databaseName=Financials;Trusted_Connection=True;MultipleActiveResultSets=True;encrypt=false"- 注意Windows身份验证需要将驱动包对应的
mssql-jdbc_auth-9.4.0.x86.dll(对应32位JDK)或mssql-jdbc_auth-9.4.0.x64.dll(对应64位JDK)放到JDK的bin目录下,否则会触发组件缺失报错。
- 把连接字符串的
3. 其他通用配置检查
- 确认SQL Server的TCP/IP协议已开启:打开SQL Server配置管理器- SQL Server网络配置- 对应实例的协议,启用TCP/IP,右键属性进入IP地址页,确认1433端口已启用、动态端口为空,修改后重启SQL Server服务生效。
- 连接串新增
encrypt=false参数:SQL Server 2019默认要求加密连接,高版本JDBC驱动默认会验证SSL证书,本地测试添加该参数可跳过验证避免额外报错。
内容的提问来源于stack exchange,提问作者Paramesh Sriram
相关产品推荐
相关产品推荐

