2011-06-19 364 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

相關問題