57

我编写了一个非常简单的 JDBC 登录测试程序。在遇到各种问题之后,我几乎让它工作了。几乎,似乎无法解决这个问题:

SQLServerException: 用户 xxxxx 登录失败

我创建了一个简单的数据库 PersonInfo,然后创建了用户 user1 password1(SQL 身份验证)。并且在尝试一切之后都无法连接到数据库。

我在 Win 7 上使用 SqlServer2008,我从 Microsoft 获得了最新的 JDBC 驱动程序。

我的代码是:

import java.sql.*;

public class hell {
public static void main(String[] args) {
    
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Connection conn=  DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=PersonInfo;user=Sohaib;password=0000;");


System.out.println("connected");
       }

    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

这是例外

Exception: Unable to get connect
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'Sohaib'.
and all other supporting errors.
4

13 回答 13

163

您的 SQL Server 是否处于“混合模式身份验证”中?这是使用 SQL 服务器帐户而不是 Windows 登录名登录所必需的。

您可以通过检查服务器的属性和安全性来验证这一点,它应该处于“SQL Server 和 Windows 身份验证模式”

如果用户尝试使用无法验证的凭据登录,则会出现此问题。在以下情况下可能会出现此问题:

场景 1:登录可能是 SQL Server 登录,但服务器只接受 Windows 身份验证。

场景 2:您尝试使用 SQL Server 身份验证进行连接,但使用的登录名在 SQL Server 上不存在。

场景 3:登录可能使用 Windows 身份验证,但登录是无法识别的 Windows 主体。无法识别的 Windows 主体意味着 Windows 无法验证登录。这可能是因为 Windows 登录来自不受信任的域。

用户也可能输入不正确的信息。

http://support.microsoft.com/kb/555332

于 2013-06-29T08:28:44.167 回答
73

就我而言,我必须激活“SQL Server 和 Windows 身份验证模式”选项,按照以下所有步骤操作:

1 - 右键单击​​您的服务器 在此处输入图像描述

2 - 转到选项安全性

3 - 选中“SQL Server 和 Windows 身份验证模式”选项

4 - 单击确定按钮 在此处输入图像描述

5 - 重新启动您的 SQL Express 服务(键盘上的“Windows 键”并写下“服务”,然后输入键) 在此处输入图像描述

之后,我可以使用用户名和密码登录

于 2019-10-10T18:40:39.227 回答
15

我遇到了同样的问题,我通过将我的 Windows 用户名添加到 SQL 然后到我的服务器来修复它,我是这样做的:

首先,使用您的 Windows 用户名创建一个新登录名: 在此处输入图像描述

单击搜索,然后在框中键入您的姓名,然后单击检查姓名。 在此处输入图像描述

然后将该用户添加到服务器:

右键单击服务器 > 权限 > 搜索 > 浏览 > 选择您的用户(您会注意到现在您创建的用户在列表中可用)

在此处输入图像描述

我希望它有帮助;-)

于 2018-04-30T19:12:39.160 回答
2

尝试连接到 Azure 中的 SQL DB(使用 sql-cli)时,我收到了相同的错误消息。简单的解决方案是用单引号转义密码,如下所示:

mssql -s server.database.windows.net -u user@server -p 'your_password' -d your_db -e
于 2017-04-19T15:19:10.127 回答
2

从 EntityFramework 连接重用 ConnectionString 时出现此错误。我们在连接字符串中有用户名和密码,但没有指定“Persist Security Info=True”。因此,在建立连接后,凭据已从连接字符串中删除(因此我们重用了不完整的连接字符串)。当然,我们在使用这个设置时总是要三思而后行,但在这种特殊情况下,它是可以的。

于 2019-08-19T15:13:23.150 回答
1

还要确保该帐户未在用户属性“状态”选项卡中锁定

于 2017-08-16T07:55:36.467 回答
0

对于Can not connect to the SQL Server. The original error is: Login failed for user 'username'.错误,需要满足 MSSQL 服务器端的端口要求。

除了默认端口 1433 之外,还需要在 Windows 防火墙上配置其他端口。

https://stackoverflow.com/a/25147251/1608670

于 2017-10-24T19:32:04.773 回答
0

我们通过使用 SQL Server 身份验证而不是 Windows 身份验证创建一个新的登录帐户,解决了我们的 Linux/php 挂钩到 SQL Server 问题。

于 2018-06-05T18:46:20.010 回答
0

以防万一其他人使用自动化创建测试用户....

我们遇到了同样的错误,这是因为我们重新创建了用户(作为测试过程的一部分)。这导致底层 SID 发生变化,这意味着 SQL 无法正确验证用户身份。

我们通过在我们的测试脚本中添加一个 drop login 命令来修复它,以确保实例上不再存在先前创建的用户(具有相同的用户名)。

于 2020-08-04T06:23:31.203 回答
0

我面临同样的问题。我使用过实体框架,并认为数据库会自动创建。请确保您的数据库存在并且名称正确。

于 2020-10-31T16:38:15.397 回答
0

在我的情况下,我在 springboot application.properties 文件中进行了如下配置,然后我可以使用服务帐户连接到 sqlserver 数据库:

url=jdbc:sqlserver://SERVER_NAME:PORT_NUMBER;databaseName=DATABASE_NAME;sendStringParametersAsUnicode=false;multiSubnetFailover=true;integratedSecurity=true
    jdbcUrl=${url}
    username=YourDomain\\$SERVICE-ACCOUNT-USER-NAME
    password=
    hikari.connection-timeout=60000
    hikari.maximum-pool-size=5
    driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
于 2021-01-11T22:44:53.673 回答
-1

如果您使用的是 Windows 身份验证,请确保至少使用该用户登录 Windows 一次。

于 2019-02-18T07:33:59.743 回答
-1

以前我使用 Windows 身份验证没有问题,然后出现以下错误。

“无法生成 SSPI 上下文。”

女巫我通过更改我的连接字符串来解决

Server=127.0.0.1;Database=[DB_NAME];Trusted_Connection=True;

Server=127.0.0.1;Database=[DB_NAME];Trusted_Connection=False;

然后下一个错误发生在我身上

“用户''登录失败。”

为了解决这个问题,我使用了sa用户。sa如果需要(在 SQL 服务器上)访问用户以更新密码Security > Logins > sa (right click) > Properties > General),然后将连接字符串更新为..

Server=127.0.0.1;Database=[DB_NAME];User Id=sa;Password=[YOUR_PASSWORD]

您可以使用您选择的其他用户。

于 2021-03-30T09:26:31.163 回答