Java 连接到 SQL Server 数据库:用户“sa”登录失败 [重复]

Posted

技术标签:

【中文标题】Java 连接到 SQL Server 数据库:用户“sa”登录失败 [重复]【英文标题】:Java connection to a SQL Server Database: Login failed for user 'sa' [duplicate] 【发布时间】:2013-06-01 22:22:52 【问题描述】:

我正在尝试连接到使用 SQL Server 2012 创建的数据库,但我不断收到错误消息。这是连接的代码:

Driver d = (Driver)Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=Tema6;user=sa;password=123456";
        java.sql.Connection con = DriverManager.getConnection(DB_URL);

这是我得到的错误:

Login failed for user 'sa'. ClientConnectionId:e6335e64-ca68-4d72-8939-5b7ded951424

我已从 SQL Server Config 启用 TCP/IP 协议,我确定“sa”帐户已启用并且密码正确。谁能帮帮我?

编辑:这是整个堆栈跟踪。

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'sa'. ClientConnectionId:e6335e64-ca68-4d72-8939-5b7ded951424
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Connection.main(Connection.java:12)

EDIT2:用jTDS替换驱动后:

java.sql.SQLException: Login failed for user 'sa'.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2893)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2335)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:609)
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:369)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Connection.main(Connection.java:19)

【问题讨论】:

请贴出连接错误的整个stacktrace来分析可能的问题。 真的很奇怪,堆栈跟踪没有提供足够的信息来检测错误。尝试使用另一个 JDBC 驱动程序连接到您的 SQL Server 数据库引擎并检查那里的错误。我推荐使用jTDS。 如果添加integratedSecurity=false会怎样;到连接字符串? @Brandon 我仍然遇到同样的错误。 @LuiggiMendoza 我用您链接的驱动程序替换了驱动程序,但它仍然无法正常工作。错误信息几乎相同。 【参考方案1】:

我认为这不是驱动程序问题,因为该消息表明它已尝试并且失败了身份验证,因此至少设法连接。

我要问的第一个(基本)问题是您是否确定“123456”是 sa 帐户的正确密码?通过以“sa”身份使用 SQL Server Management Studio 登录来测试它。

接下来我会尝试在 SQL Server 中创建一个用户并在连接字符串中提供这些凭据(如 Brandon 所建议的那样)

接下来(为了好玩)我将启用混合模式身份验证并尝试在连接字符串中使用我的 Windows 用户帐户凭据。

这些是我过去为在 SQL Server 中配置网络而编写的一些说明。绝对值得仔细检查设置:

配置 SQL Server 网络 开箱即用的 SQL Server 2008 Express 不支持固定端口上的 TCP 连接。要解决此问题: 从 Windows 开始菜单打开“SQL Server 配置管理器” 在“SQL Server 网络配置”->“SQLEXPRESS 协议”下 打开 TCP/IP 属性 在“协议”选项卡上 将启用设置为 YES 在“IP 地址”选项卡上滚动到底部 在“全部 IP”下 将 TCP 端口更改为 1433 确保 TCP 动态端口为空,删除零 点击申请

在 SQL Server Management Studio 中检查: 从服务器实例右键单击并选择属性 在安全选项下:确保选中“SQL Server 和 Windows 身份验证模式”

【讨论】:

1.是的,我仔细检查了那个密码,它是正确的。 2. 我创建了另一个用户并授予了 sysadmin 角色。还是一样的结果。 3. 我尝试过使用 Windows 身份验证,但同样的输出 就配置 SQL Server 网络而言,我什至在尝试连接到数据库之前就完成了您告诉我的所有操作,一切都很好。其余的设置都是默认的,我没有修改其他的,所以我觉得很奇怪。 是的,听起来很奇怪。在这里刮一下桶:1.如果从连接字符串中删除数据库引用,错误是否会改变? 2. 尝试使用 127.0.0.1 作为 IP 地址 3. 尝试使用实际网络 ip 而不是 localhost 4. 尝试重新启动 5. 尝试重新安装!就是这样,我的想法很新鲜 好吧,最后,我放弃了 SQL Server,我安装了 mysql Workbench 并使用 XAMPP 制作了一个服务器(我希望这是正确的术语)。这一次,一切顺利,我现在可以继续使用我的 Java 应用程序了。谢谢大家的准备。【参考方案2】:

点击 SQL --> 点击鼠标右键 --> propretise --> Securiti -->勾选 SQL server and windows Authentication mode

90% 成功!

【讨论】:

【参考方案3】:

此数据库网址格式错误

String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=Tema6;user=sa;password=123456";

试试这个

Connection connection = DriverManager
                .getConnection("jdbc:sqlserver://localhost:1433;\\SQLEXPRESS;databaseName=Tema6","sa","123456");

【讨论】:

【参考方案4】:

我还没有真正检查过您的堆栈跟踪,但是人们忘记允许远程连接到服务器是很常见的。尝试右键单击服务器实例(对象资源管理器)> 属性 > 连接并检查 允许远程连接到此服务器

【讨论】:

是的,已经检查过了。 在 SQL Server 配置管理器中,您是否启动了 SQL Server、SQL Server Agent 和 SQL Server Browser?【参考方案5】:

检查配置了 sql server 的端口。如果端口配置为“动态端口”并且您尝试连接默认端口,则会收到此奇怪的错误。

您可以通过 sqlserver 客户端尝试连接到 sql server 来检查这是否是问题所在。

    设置认证方式为“sql server authentication” 在服务器字段中输入服务器名称和端口,格式为“服务器名称,端口” 输入用户名和密码,点击连接

如果连接不成功并且您收到确切的错误消息“用户 xxx 登录失败”,那么这就是问题

https://msdn.microsoft.com/en-IN/library/ms177440.aspx

【讨论】:

拯救了这一天!我正在指定 jdbc 端口并在此上浪费了数小时的时间,并显示登录失败的消息。从连接中移除端口和动臂全部固定【参考方案6】:

转到sql server,选择用户属性并将服务器角色更改为sysadmin解决了这个问题。

【讨论】:

将系统管理员角色分配给客户在没有非常具体要求的情况下使用的常规数据库用户通常不是最佳做法,应该避免。

以上是关于Java 连接到 SQL Server 数据库:用户“sa”登录失败 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 android (java) 连接到 SQL Server 2008 数据库

Java 连接到 SQL Server 数据库:用户“sa”登录失败 [重复]

使用 Java 从 Oracle 服务器连接到 MS SQL Server

使用 jdbc Java、Android 应用程序连接到 SQL Server 数据库

使用 Windows 身份验证将我的 Sql Server 2008 数据库连接到我的 Java 项目

JAVA如何连接到sqlserver