2013-08-26 46 views
4

我正在創建一個Windows控制檯應用程序來監視用戶的出席情況。 當用戶登錄到他的計算機(連接到網絡)時,應該在SQL Server數據庫中更新Windows登錄時間。何處在客戶端控制檯應用程序中保存SQL Server連接字符串?

所有客戶端計算機都使用網絡連接。

問題是我將數據庫連接字符串保存到服務器的位置?如果將連接字符串(已加密)保存在客戶端應用程序中運行的控制檯應用程序中,則會在幾個月後發生服務器名稱/用戶名/密碼更改時產生問題。

請諮詢此問題的最佳方法。

+1

在客戶端控制檯應用程序中的數據發送到服務器上運行的東西。讓服務器應用程序與數據庫進行通話。這樣,維護只需在服務器上完成,而不是每個客戶端。 –

+0

@DanBracuk誠然,但根本問題依然存在:在實際執行任何請求之前,客戶端應該有一些需要服務器驗證的「身份」。 –

+0

@ Christian.K,可以使用客戶端的windows用戶名來驗證客戶端身份。 –

回答

3

您應該將app.config文件添加到您的項目並將連接字符串存儲在其中。

Project-->Add->New Item-->Application Configuration File 

添加連接字符串作爲

<connectionStrings> 
    <add connectionString="test" name="test"/> 
</connectionStrings> 

它讀成

string connectionString = ConfigurationManager.ConnectionStrings["test"].ConnectionString; 

但是關於什麼密碼存儲在引黃字符串?事實上,你的整個連接字符串應該加密,並考慮到MS也提供了一個內置的解決方案。你需要看看這個Section protection

注:您必須在您的項目

4

你的確可以將其存儲在應用程序配置文件添加引用System.Configuration(見@沒有人的answer有詳細介紹)。但是,請記住,您應該在而不是那裏存儲用戶名和密碼。

您有以下選擇:

(一)encryptconnectionStrings配置部分。當你發現YMMV時,有一些管理「問題」。 (b)不存儲用戶名和密碼,但在運行期間從用戶查詢它們;(b)不存儲用戶名和密碼,但在運行時從用戶查詢它們;(b)不存儲用戶名和密碼,可選地允許它們被指定爲命令行參數 - 儘管它有它自己的問題:使用諸如任務管理器或Process Explorer之類的進程查看器工具可以看見參數(以及因此用戶名/密碼)。 (c)查看是否可以將連接憑證從用戶名/密碼更改爲集成安全性(因此,您不需要在連接字符串中輸入用戶名/密碼,因此也不需要在配置文件中)。

選項(c)是最好的。它完全消除了用戶名(更重要的是)密碼的必要性。但是,您的應用程序(和環境)必須爲此準備(更多here)。

如果您選擇(b),您可以在配置中指定連接字符串,而不需要使用UserPassword鍵。你將讓用戶指定他們,然後積累真正的連接字符串利用SqlConnectionStringBuilder(或DbConnectionStringBuilder)班進一步上使用:

var builder = new SqlConnectionStringBuilder(
    ConnectionManager.ConnectionStrings["test"].ConnectionString); 
builder.UserID = /* Username specified by user */ 
builder.Password = /* Password specified by user */ 

string realConnectionString = builder.ConnectionString; 
+0

正如你所說,選項(c)是最好的。但在我的情況下,我有客戶端計算機不少於3000.給所有用戶的表訪問我的表不會是一個不錯的選擇。 –

+1

您可以將它們放入Windows組並授予這些訪問權限。至少這會使它更易於管理。但正如已經對這個問題本身提出的評論一樣,您可能想要完全考慮一種不同的方法:簡而言之,提供一個代表實際數據庫工作的應用程序服務。然後您將使用(3000)用戶帳戶對此服務進行身份驗證。服務本身將使用(單個)技術用戶對SQL Server實例進行身份驗證。 –

相關問題