SqlServer:用户登录失败

时间:2013-06-28 19:51:34

标签: sql-server sql-server-2008 jdbc

我写了一个非常简单的jdbc登录测试程序。经过各种各样的问题,我几乎得到了它的工作。几乎,似乎无法通过这个“SQLServerException:登录失败的用户xxxxx”问题。

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

我在Win 7上使用SqlServer2008,我从微软获得了最新的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..

不幸的是,我现在已经死了,直到某种SqlServer Guru或Jdbc Guru对我表示同情并帮助我。

提前感谢。

13 个答案:

答案 0 :(得分:78)

您的SQL Server是否处于'混合模式身份验证'?这是使用SQL Server帐户登录而不是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

答案 1 :(得分:5)

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

1-右键单击您的服务器 enter image description here

2-转到安全选项

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

4-单击确定按钮 enter image description here

5-重新启动SQL Express服务(键盘上的“ Windows键”并输入“服务”,然后按Enter键) enter image description here

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

答案 2 :(得分:4)

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

首先,使用Windows用户名创建一个新登录名: enter image description here

单击“搜索”,然后在框中键入您的姓名,然后单击“检查姓名”。 enter image description here

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

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

enter image description here

我希望它有所帮助; - )

答案 3 :(得分:1)

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

mssql -s server.database.windows.net -u user@server -p 'your_password' -d your_db -e

答案 4 :(得分:0)

还要确保帐户未在用户属性“状态”标签中锁定

答案 5 :(得分:0)

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

在Windows防火墙上需要配置默认端口1433以外的其他端口。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

当从EntityFramework连接重新使用ConnectionString时,出现此错误。我们在连接字符串中包含用户名和密码,但未指定“ Persist Security Info = True”。因此,建立连接后,将凭据从连接字符串中删除(因此我们重用了不完整的连接字符串)。当然,在使用此设置时,我们总是必须三思而后行,但是在这种情况下,没关系。

答案 9 :(得分:0)

以防万一其他人正在使用自动创建测试用户的方式...。

我们有同样的错误,这是因为我们已经重新创建了用户(作为测试过程的一部分)。这导致基础SID发生更改,这意味着SQL无法正确验证用户身份。

我们通过在测试脚本中添加drop login命令来解决此问题,以确保实例上不再存在以前创建的用户(具有相同的用户名)。

答案 10 :(得分:0)

我面临着同样的问题。我使用了Entity Framework,并认为将自动创建数据库。请确保您的数据库存在并且名称正确。

答案 11 :(得分: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

答案 12 :(得分:-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]

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