0

我正在考慮構建一個Click-Once應用程序,並試圖圍繞如何處理整個連接字符串問題進行包裝。問題是以下幾點:如何處理Click-Once應用程序中的連接字符串?

我想使用EF從每個客戶端直接獲取數據,因此要求每個客戶端都配置一個連接字符串(這不是問題)。我如何處理與被查詢的SQL Server不在同一域中的客戶端?換句話說,如果我試圖在家中而不是從工作中運行我的應用程序,我的連接字符串應該是什麼樣子?我需要不同地配置我的SQL Server以允許這種情況嗎?

在此先感謝!

回答

3

此問題超出ClickOnce,這是一個普遍的網絡問題。

第一個問題是:您可以在家中訪問SQL Server嗎?

如果SQL Server位於公司內部網絡上,最有可能的答案是「否」。您需要設置VPN才能連接服務器。如果你設置了VPN,那麼你應該可以,只要用從家裏相同的連接字符串,你完全有資格的服務器名稱,即SqlServer.mycompany.local而不是僅僅SqlServer。您可能會使用域憑據連接到VPN,因此您可以使用相同的連接字符串。

但更好的方法是使用一個包裝類如WCF Data Services。這將通過Web服務(WCF)公開數據併爲您提供很多功能 - 您可以針對它和所有內容編寫Linq。從長遠來看,如果您希望遠程使用應用程序,這可能會更容易。

在我們的例子中,我們實際上有商業服務 - 一個相當大的API,可通過Web Services提供的業務邏輯,而不是僅僅包裹數據庫表(稱其爲SOA,如果你喜歡)。在超長期來看,這是最好的的選擇,因爲它抽象,而不是數據庫的邏輯API,但如果你正在尋找一個快速解決,WCF數據服務可能是要走的路。

+0

+1數據服務是更可能的是什麼,我會最終使用 - 謝謝! – Pwninstein 2010-03-15 16:43:41

1

您打算如何驗證家庭用戶?在域內,您可以使用集成身份驗證檢查用戶帳戶權限,以便連接字符串本身不包含憑據。對於域外用戶,我不認爲這是可能的。

我認爲你需要將你的數據庫封裝在web服務之後,web服務支持非基於域的認證方案。遠程用戶訪問不是數據庫。

0

儘管SQL身份驗證可以工作,但您需要爲SQL服務器上的應用程序的每個用戶設置不同的用戶/密碼組合。不是理想的或易於維護的情況。

最好的辦法是根本不連接數據庫。相反,構建應用程序調用以獲取其數據的安全Web服務。該Web服務可以通過Windows或用戶名/密碼auth(可以針對AD域進行驗證)進行安全保護。

0

如果SQL Server可以在相同的主機名上進行路由,而不管客戶端位於何處(例如,您的家,客戶的辦公室) - 我猜測您已經設置了某種VPN或DMZ,以便您的SQL服務器那麼您可以將連接字符串保留在您的應用程序中並使用SQL身份驗證(即用戶名/密碼與Windows身份驗證)。

如果您的SQL服務器需要不同的連接字符串(例如在工作時它的訪問範圍是sql.internal.domain.comsql.external.domain.com以外的工作),那麼你需要某種選擇機制,用戶可以在登錄之前選擇使用哪個連接 - 在應用程序中包含所有可能的連接字符串。

你也可以不喜歡使用IP地址來確定要使用的連接字符串(例如,如果當前的PC的IP地址範圍爲172.40.10.1 - 172.40.10.254)時髦的東西,然後連接到sql.internal.domain.com,否則sql.external.domain.com。當然,這更難以維持。

編輯

正如其他人所建議的,網絡服務也可以在支付股息這裏。

相關問題