2011-06-19 157 views
2

我试图将我的Java代码连接到Microsoft SQL Server 2008 R2 Express数据库。我已经下载了Microsoft SQL Server JDBC Driver 3.0,并将sqljdbc4.jar添加到我的类路径中。我正在使用Netbeans,并且在我的项目中也包含了sqljdbc4.jar。将SQL Server 2008连接到Java:登录失败,出现用户错误

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

然后,我通过右键单击JACOB-PC/SQLEXPRESS-> Secuity Folder-> Logins文件夹下的窗口资源管理器中的登录文件夹创建了一个新登录名,并添加了新的登录名。我给它命名为jhaip2,切换到SQL Server身份验证并将密码设置为jacob。强制执行密码策略并强制密码过期未被选中。默认数据库设置为TestDB1。然后在TestDB1-> Secuity-> Users-> jhaip2-> Database角色成员资格下,我将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) {} 
     } 
    } 
} 

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

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

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

+1

你正确添加用户到数据库引擎的具体数据库 – mKorbel

+1

你有没有试着用SQL Server管理控制台内的用户名和密码登录?也许你的sqlserver被配置为使用windows验证而不是sql server验证。 – Omnaest

+0

@ user625146我忘记了这一点,同意更改Windows对混合模式的支持,+1和SQL2008R2通过默认关闭了网络管道...... – mKorbel

回答

2

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

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

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

10
  1. 运行此查询选择数据库

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

    我使用aaron792你应该用你的

  2. 在SQL Server Management Studio中去对象资源管理器并右键单击(本地)( SQL服务器XXX)然后去属性,它会打开服务器属性,然后去安全性和更改服务器身份验证模式从Windows只到SQL服务器或Windows(第二选项)

  3. 在服务器属性中,去权限,然后从登录或规则列表中新创建的用户,然后在它下面检查GRANT ALL选项明确的规则

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

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

+0

非常有趣。授权步骤可以编写脚本吗? –

0

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

我只想补充说,没有必要重新安装SQL服务器和所有相关的程序。只需要改变认证模式。看到这个答案的详细信息:An attempt to login using SQL authentication failed

7

我知道这已经被回答,但想给一个小的转折它,而无需重新安装整个SQLSERVER RDBMS。 这个概念是改变你试图连接的sqlserver实例的属性。

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

    • 右键单击实例并从弹出菜单中选择属性,该属性将打开一个服务器属性窗口。
    • 选择位于页面右侧的安全选项。然后将服务器认证从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标签被选中,然后选择下Log on as:选项命名Built-in Account的单选按钮。然后从组合框中选择Local System
    • 单击确定。通过点击确定,你会被要求重新启动实例,继续重新启动它。如果未询问重启,则转到下面的第三步。
  3. 第三步:重新启动SQLSERVER RDBMS。

    • 转到Control Panel>Administrative Tools>Component Services
    • 从左侧窗格中选择服务
    • 然后从右侧窗格中选择SQL Server (MSSQLSERVER),单击重新启动,只是稍微向右上方。
+2

感谢这正是我所需要的。非常准确,彻底! – aslakjo

相关问题