2010-01-16 62 views
7

如果C#應用程序從客戶端連接到mysql服務器,如何存儲連接的mysql用戶名/密碼?如果我將它放在配置文件中或嵌入源代碼中,可以通過逆向工程找到它。無法爲所有用戶提供MySql密碼。C#mysql連接實踐

此外,我有一個應用程序登錄。我該如何強制用戶完成登錄過程,而不是僅僅對C#代碼進行反向工程和註釋,以驗證登錄?

反正是有管理MySQL和客戶端應用程序之間的這些連接或必須要有在服務器端與數據庫交互的第三個節目在當地是安全的?

+0

有趣......我打算把這個標記爲dup,但是在SO上搜索到了zilch。這個問題只被問到ASP.NET,似乎從來沒有關於Winform客戶端。 – 2010-01-16 04:52:04

回答

3

也許你可以有一個二級系統:有其唯一的權限來執行存儲過程,它接受用戶的用戶名和密碼,給他們使用真實帳戶的憑據SQL帳戶。用戶登錄後,使用受限帳戶進行連接,獲取真實帳戶的憑證,然後使用該帳戶進行工作。您也可以相當頻繁地更改SQL密碼。如果您懷疑有犯規行爲的用戶,請讓程序爲他們返回一組不同的憑證,並跟蹤這些憑證。

+0

我想我喜歡這個。此解決方案是否存在任何潛在問題? – MattR 2010-01-16 04:46:25

+1

正如Paul Sasik所說,如果使用共享密碼,那麼擁有足夠權限訪問自己機器的用戶可以獲取該密碼。所以雖然這可以緩解這個問題(只有登錄用戶可以找到SQL密碼),但它並沒有消除它。要徹底消除它,你需要在用戶和數據庫之間有一些東西。 – Yuliy 2010-01-16 05:23:05

1

這是問題所在。您使用將調用MySQL查詢的二進制文件信任最終用戶。這意味着,除了任何懷疑之外,一個聰明的用戶可以「控制」並直接運行查詢。

有些事情可以改善這種情況。這聽起來像你在一個局域網。爲什麼你不能給每個用戶自己的數據庫用戶?這意味着認證是(a)照顧你的,(b)你可以使用「真正的」MySQL權限來限制他們可以做的傷害。此外,你可以使用存儲過程,並讓他們只能訪問過程,真正限制他們可以做什麼。

您也可以考慮重新編寫一個Web應用程序,在其中處理服務器上的所有內容。

但是,這裏真的存在問題,還是你只是在理論上?

2

對於直接連接到db的Winform客戶端,這是一個可能永遠不會解決的(10年左右?)問題。

問題是無論您如何加密或混淆連接字符串,總是會有一個時間點字符串將在客戶端計算機的內存中以純文本形式表示,因此可以進行破解。

你被其他SOers推薦的選項,我只是想我會指出你想要解決的問題。