将SQL Server 2008连接到Java:登录失败,表示用户错误

我正在尝试将我的Java代码连接到Microsoft SQL Server 2008 R2 Express数据库。 我已下载Microsoft SQL Server JDBC驱动程序3.0并将sqljdbc4.jar添加到我的类路径中。 我正在使用Netbeans并且在我的项目中也包含了sqljdbc4.jar。

我在SQL Server Management Studio中创建了一个名为TestDB1的数据库,并添加了一些我将用于测试的列和值。 我通过右键单击服务器JACOB = PC \ SQLEXPRESS-> Properties-> Secuity并从Windows身份validation模式更改为SQL Server和Windows身份validation模式,从Windows身份validation模式更改。

然后,我通过右键单击JACOB-PC / SQLEXPRESS-> Secuity Folder-> Logins Folder下的窗口浏览器中的Login文件夹创建了一个新登录,并添加了一个新的登录名。 我给它命名为jhaip2,切换到SQL Server身份validation并将密码设置为jacob。 未选中强制执行密码策略和强制密码过期。 默认数据库设置为TestDB1。 然后在TestDB1-> Secuity-> Users-> jhaip2->数据库角色成员身份我将jhaip2设置为db_owner(我无法在没有这样做的情况下登录管理工作室中的数据库,可能不是正确的事情?)。 然后我重新启动了服务器。

现在对于我的java代码,它基本上是JDBC Driver 3.0示例代码的直接副本,除了没有Windows身份validation。

package databasetest1; import java.sql.*; public class connectURL { public static void main(String[] args) { // Create a variable for the connection string. String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=TestDB1;"; // Declare the JDBC objects. Connection con = null; Statement stmt = null; ResultSet rs = null; try { // Establish the connection. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("Driver okay"); con = DriverManager.getConnection(connectionUrl,"jhaip2","jacob"); System.out.println("Connection Made"); } // Handle any errors that may have occurred. catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) try { rs.close(); } catch(Exception e) {} if (stmt != null) try { stmt.close(); } catch(Exception e) {} if (con != null) try { con.close(); } catch(Exception e) {} } } } 

当我运行时,它打印出“Driver okay”,所以我假设我的驱动程序设置正确。 然后它打印错误:

 com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'jhaip2'. 

使用什么用户名并不重要,它总是失败。 我有一种感觉,我设置用户错了。 如果有人可以给我一些关于如何正确设置用户的帮助或者如何简单地连接到Java中的SQL Server数据库的任何指导,我将不胜感激。

  1. 通过选择数据库来运行此查询

      CREATE LOGIN aaron792 WITH PASSWORD='12345' USE BudgetAuthorization CREATE USER aaron792 

    我用aaron792你应该用你的

  2. 在sql server管理工作室转到对象资源管理器并右键单击(本地)(sql server xxx)然后转到属性它将打开服务器属性然后转到安全性并将服务器身份validation模式从Windows更改为sql server或windows(2nd选项)

  3. 在服务器属性中,转到权限并从登录或规则列表中选择新创建的用户,然后在下面检查显式规则中的所有授权选项

  4. 打开SQL服务器配置管理器和 – >顶行SQL服务器SQL服务器右键单击并打开属性,然后将内置帐户更改为本地系统

然后重启每件事并确保它正在运行。 然后尝试你的代码

我知道这已经得到了回答,但是想要给它一些改动而不必重新安装整个SQLSERVER RDBMS。 这个概念是更改您尝试连接的sqlserver实例的属性。

  1. 第一步 。 打开SQL Management Studio并从对象资源SQL Management Studio选择sql server实例。

    • 右键单击实例,然后从弹出菜单中选择属性,这将打开服务器属性窗口。
    • 选择位于页面右侧的安全选项。 然后将服务器身份validation从Windows Authentication mode更改为SQL SERVER and Windows Authentication mode (mixed mode)
    • 之后选择“ Permissions选项。 然后选择权限,选择您要授予权限的登录帐户。 (在此之前应创建登录帐户,请查看本教程http://www.blackthornesw.com/robo/projects/blackthornepro/HOWTO_-_Creating_a_SQL_Server_Database_Login_Account.htm 。版本可能与您的版本不同,但概念或工作流程仍然存在相同。)。 在权限下,选择“ Explicit选项卡,然后在“ Grant下,选择所有选项。
    • 单击确定。
  2. 第二步 :配置RDBMS以使用内部创建的登录帐户。 因此:

    • 打开/启动SQLSERVER configuration Manager
    • 从左窗格中选择“ SQL SERVER Services ”。
    • 选择该选项后,移至右侧窗格并右键单击SQL Server (MSSQLSERVER)选项,然后从弹出菜单中选择属性。
    • 将出现SQL Server(MSSQLSERVER)属性窗口,确保选中“ Log On选项卡,然后Built-in Account下选择名为“ Built-in Account的单选按钮Log on as:选项。 然后从combobox中选择Local System
    • 单击确定。 单击确定,将要求您重新启动实例,继续重新启动它。 如果未询问重启,请转到下面的第3步。
  3. 第三步 :重启SQLSERVER RDBMS。

    • 转到Control Panel > Administrative Tools > Component Services
    • 从左侧窗格中选择“服务”
    • 然后从右侧窗格中选择SQL Server (MSSQLSERVER) ,单击重启,这只是右上角的一点点。

当我查看SQL Server日志文件时,它说我无法登录,因为SQL Server处于Windows身份validation模式,即使在程序中它已设置为混合身份validation模式。

安装时,我已将其设置为Windows身份validation模式,但更改程序中的设置不会从Windows身份validation模式更改它。

我从我的计算机上删除了SQL Server 2008和所有相关程序,并安装了一个新的副本,这次是使用SQL Server身份validation。 现在一切正常。 我不知道为什么SQL Server在更改身份validation模式时遇到问题,但它现在可以正常工作,所以我很高兴。

这个问题可能是同一个问题: MS SQL Server 2005 Express x86 – 它的端口无法访问 – 帮助 。

在使用JDBC通过TCP连接进行连接之前,必须确保SQL Server正在侦听正确的端口。

我遇到了同样的问题。 谢谢你,jhaip,指出我正确的方向:SQL Server处于Windows身份validation模式。

我只想补充说,没有必要重新安装SQL服务器和所有相关程序。 只需要更改身份validation模式即可。 有关更多详细信息,请参阅此答案: 尝试使用SQL身份validation登录失败