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

jha*_*aip 2 java sql sql-server jdbc sql-server-2008

我正在尝试将我的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身份验证模式更改为SQL Server和Windows身份验证模式,从Windows身份验证模式更改.

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

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

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) {}
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

当我跑,它打印出"驱动程序好",所以我假设我的驱动程序设置正确.然后它打印错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'jhaip2'.
Run Code Online (Sandbox Code Playgroud)

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

Mub*_*her 10

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

     CREATE LOGIN aaron792 WITH PASSWORD='12345'
     USE BudgetAuthorization
     CREATE USER aaron792
    
    Run Code Online (Sandbox Code Playgroud)

    我使用aaron792你应该使用你的

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

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

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

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


小智 9

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

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

    • 右键单击实例,然后从弹出菜单中选择属性,这将打开服务器属性窗口.
    • 选择位于页面右侧的安全选项.然后将服务器身份验证更改Windows Authentication modeSQL 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 AccountLog on as:Option 下命名的单选按钮.然后从组合框中选择Local System.
    • 单击确定.通过单击确定,将要求您重新启动实例,继续重新启动它.如果未询问重启,请转到下面的第3步.
  3. 第三步:重启SQLSERVER RDBMS.

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

  • 谢谢,这正是我所需要的.+1非常特别和彻底! (4认同)