2013-04-22 221 views
0

我認爲這很簡單,但我似乎無法弄清楚。我想要一個C#表單詢問用戶名和密碼。我想通過詢問SQL是否可以登錄到SQL數據庫來驗證用戶。我已經嘗試了一種基本的方法,只是將用戶名和密碼放在連接字符串中,但那不起作用,我收到一條錯誤消息「用戶某某無法訪問」我是假設是因爲密碼沒有正確傳遞。這是我有:使用Active Directory憑據連接到SQL Server

Web.config文件:

<connectionStrings> 
    <add name="connectionname" 
    connectionString="Data Source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;" 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 
<system.web> 
    <identity impersonate="true" /> 
    .... 

我的代碼背後:

try 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "Data Source=myserver;Initial Catalog=mydb;User ID=" + useridTextBox.Text + ";Password=" + passwordTextBox.Text; 
    con.Open(); 
    con.Close(); 
    //successful login 
    validDBLogin = true; 
    pageMsg.Text = "Successful AD and DB login"; 
    } 
    catch (Exception err) //if error Opening, catch the error, and display 
    { 
    pageMsg.Text = "No access to the Database"; 
    pageMsgAdditional.Text = err.Message.ToString(); 
    validDBLogin = false; 
    } 

必須有辦法做到這一點?我的目標是使用SQL進行身份驗證。如果用戶想要訪問,我可以讓他們訪問數據庫,這就是我必須要做的。我也希望以這種方式集成安全性,這樣我就可以跟蹤哪個用戶運行了哪個sql查詢。 (不知道它是否有所作爲,但我們正在使用Active Directory作爲這些帳戶,至今沒有任何問題)。

在此先感謝!

回答

2

您錯誤地理解了SQL Server中的SSPI集成。

連接字符串1(SSPI):

Data Source=myserver;Initial Catalog=mydb;Integrated Security=SSPI; 

這告訴SQL Server檢查擁有正試圖連接的過程中用戶的憑據。在這種情況下,ASP.Net應用程序池標識是「Active Directory用戶」的上下文。

連接字符串2(用戶名/密碼):

Data Source=myserver;Initial Catalog=mydb;User ID=xxxx;Password=yyyy; 

這告訴SQL服務器來認證用戶ID 「XXXX」 作爲SQL Server登錄。

這樣做不是爲SQL Server提供域用戶「xxxx」以進行身份​​驗證。即使使用格式「Domain \ xxxx」也不行。你不能。

+0

謝謝。我想選項2已經不存在了,(我正在嘗試'domain \ xxxx')。我最初嘗試了選項一,但從sql中獲得錯誤消息「登錄失敗。登錄來自不受信任的域,不能與Windows身份驗證一起使用。」我不認爲它使用我的表單用戶名/密碼。我如何告訴它明確使用我在表單中輸入的用戶名/密碼(哪些是廣告憑證)? – russds 2013-04-22 21:54:14

1

傳遞活動目錄ID的用戶名密碼是不可能的。它始終使用運行該網站的應用程序池的Id。

相關問題