我正在創建一個Windows控制檯應用程序來監視用戶的出席情況。 當用戶登錄到他的計算機(連接到網絡)時,應該在SQL Server數據庫中更新Windows登錄時間。何處在客戶端控制檯應用程序中保存SQL Server連接字符串?
所有客戶端計算機都使用網絡連接。
問題是我將數據庫連接字符串保存到服務器的位置?如果將連接字符串(已加密)保存在客戶端應用程序中運行的控制檯應用程序中,則會在幾個月後發生服務器名稱/用戶名/密碼更改時產生問題。
請諮詢此問題的最佳方法。
我正在創建一個Windows控制檯應用程序來監視用戶的出席情況。 當用戶登錄到他的計算機(連接到網絡)時,應該在SQL Server數據庫中更新Windows登錄時間。何處在客戶端控制檯應用程序中保存SQL Server連接字符串?
所有客戶端計算機都使用網絡連接。
問題是我將數據庫連接字符串保存到服務器的位置?如果將連接字符串(已加密)保存在客戶端應用程序中運行的控制檯應用程序中,則會在幾個月後發生服務器名稱/用戶名/密碼更改時產生問題。
請諮詢此問題的最佳方法。
您應該將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。
注:您必須在您的項目
你的確可以將其存儲在應用程序配置文件添加引用System.Configuration
(見@沒有人的answer有詳細介紹)。但是,請記住,您應該在而不是那裏存儲用戶名和密碼。
您有以下選擇:
(一)encrypt的connectionStrings
配置部分。當你發現YMMV時,有一些管理「問題」。 (b)不存儲用戶名和密碼,但在運行期間從用戶查詢它們;(b)不存儲用戶名和密碼,但在運行時從用戶查詢它們;(b)不存儲用戶名和密碼,可選地允許它們被指定爲命令行參數 - 儘管它有它自己的問題:使用諸如任務管理器或Process Explorer之類的進程查看器工具可以看見參數(以及因此用戶名/密碼)。 (c)查看是否可以將連接憑證從用戶名/密碼更改爲集成安全性(因此,您不需要在連接字符串中輸入用戶名/密碼,因此也不需要在配置文件中)。
選項(c)是最好的。它完全消除了用戶名(更重要的是)密碼的必要性。但是,您的應用程序(和環境)必須爲此準備(更多here)。
如果您選擇(b),您可以在配置中指定連接字符串,而不需要使用User
和Password
鍵。你將讓用戶指定他們,然後積累真正的連接字符串利用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;
正如你所說,選項(c)是最好的。但在我的情況下,我有客戶端計算機不少於3000.給所有用戶的表訪問我的表不會是一個不錯的選擇。 –
您可以將它們放入Windows組並授予這些訪問權限。至少這會使它更易於管理。但正如已經對這個問題本身提出的評論一樣,您可能想要完全考慮一種不同的方法:簡而言之,提供一個代表實際數據庫工作的應用程序服務。然後您將使用(3000)用戶帳戶對此服務進行身份驗證。服務本身將使用(單個)技術用戶對SQL Server實例進行身份驗證。 –
在客戶端控制檯應用程序中的數據發送到服務器上運行的東西。讓服務器應用程序與數據庫進行通話。這樣,維護只需在服務器上完成,而不是每個客戶端。 –
@DanBracuk誠然,但根本問題依然存在:在實際執行任何請求之前,客戶端應該有一些需要服務器驗證的「身份」。 –
@ Christian.K,可以使用客戶端的windows用戶名來驗證客戶端身份。 –