Intellij连接SQL Server后执行代码报用户登录失败错误求助
我来帮你排查这个登录失败的问题,这类错误大多和身份验证、连接配置或者权限有关,咱们一步步来:
明确身份验证方式,完善连接字符串
SQL Server支持两种核心验证方式,你的连接字符串里没明确指定,这大概率是问题根源:- 如果用Windows集成验证(也就是用当前登录Windows的账户访问SQL Server),必须在连接字符串里加上
integratedSecurity=true;,修改后的字符串应该是:
注意:这种方式需要把SQL Server JDBC驱动包里的String connection1 = "jdbc:sqlserver://ONE:1433;databaseName=IntellijDB;integratedSecurity=true;";sqljdbc_auth.dll放到JRE的bin目录,或者项目的依赖目录里(32位/64位版本要和你的JVM匹配)。 - 如果用SQL Server身份验证(单独的SQL账户,比如sa或者自定义账户),必须在连接字符串里指定用户名和密码:
另外你写的第二个连接字符串String connection1 = "jdbc:sqlserver://ONE:1433;databaseName=IntellijDB;user=你的SQL账户名;password=你的SQL账户密码;";jdbc:sqlserver:IntellijDB格式不完整,JDBC URL必须包含服务器地址和端口(默认实例可省略端口,但不推荐),直接用这个肯定连不上,建议放弃这种写法。
- 如果用Windows集成验证(也就是用当前登录Windows的账户访问SQL Server),必须在连接字符串里加上
核对SQL Server的监听配置
确认你的SQL Server实例确实在1433端口监听:
打开SQL Server配置管理器,依次找到「SQL Server网络配置」→「你的实例的协议」→「TCP/IP」,检查是否已启用,然后双击TCP/IP,在「IP地址」标签页里确认「TCP端口」设置为1433。对齐IntelliJ数据源配置和代码参数
你说已经在IntelliJ里成功建立了连接,那打开Database工具窗口,找到这个数据源,查看它的连接详情(比如用的是哪种验证方式、用户名是什么),确保代码里的连接字符串和这个配置完全一致。比如IntelliJ里用的是SQL账户验证,那代码里必须同步加上user和password参数。验证SQL账户的数据库权限
打开SQL Server Management Studio(SSMS),用你代码里要使用的账户登录,尝试执行:USE IntellijDB; SELECT * FROM 任意一张表;如果执行失败,说明这个账户没有访问IntellijDB的权限,需要在SSMS里给它分配权限(比如右键数据库→「属性」→「权限」,添加账户并赋予
db_datareader、db_datawriter等必要权限)。检查防火墙拦截
确认你的本地防火墙(或者SQL Server所在服务器的防火墙)没有拦截1433端口的TCP连接。可以临时关闭防火墙测试,如果关闭后错误消失,就需要在防火墙上添加一条入站规则,允许1433端口的TCP流量。
内容的提问来源于stack exchange,提问作者Ahmed Bayunes

