我写了一个非常简单的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对我表示同情并帮助我。
提前感谢。
答案 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登录来自不受信任的域。
用户也可能输入错误的信息。
答案 1 :(得分:5)
就我而言,我必须激活选项“ SQL Server和Windows身份验证模式”,请执行以下所有步骤:
2-转到安全选项
3-选中“ SQL Server和Windows身份验证模式”选项
5-重新启动SQL Express服务(键盘上的“ Windows键”并输入“服务”,然后按Enter键)
之后,我可以使用用户名和密码登录
答案 2 :(得分:4)
我遇到了同样的问题,我通过将我的Windows用户名添加到SQL然后到我的服务器来修复它,这是我的做法:
单击“搜索”,然后在框中键入您的姓名,然后单击“检查姓名”。
然后将您的用户添加到服务器:
右键单击服务器>权限>搜索>浏览>选择您的用户 (您会注意到现在您创建的用户在列表中可用)
我希望它有所帮助; - )
答案 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以外的其他端口。
答案 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]
您可以选择使用其他用户。