簡體   English   中英

通過C#應用程序在服務器中訪問文件

[英]Reaching a file in a server through C# application

我在c#和SQLite中編寫了一個應用程序,用於存儲擁有約500名員工的公司中所有員工的數據。 我想將數據庫和應用程序放在文件服務器/共享文件夾(MS服務器)中。 然后,所有員工都將在其桌面上擁有應用程序的快捷方式。 我想根據用戶運行應用程序的權限啟用/禁用一些輸入字段(文本框)。 這樣做的最佳做法是什么?

我希望用戶只能通過我的應用程序在數據庫中讀/寫(應用程序位於同一個數據庫文件夾中)。 我不希望用戶在沒有我的應用程序的情況下訪問數據庫。 怎么做?

如果您不希望用戶訪問您的數據庫,則應創建客戶端服務器體系結構。

您可以在與文件服務器相同的計算機上運行服務(作為Windows服務運行),並使用WCF在服務器和客戶端之間進行通信。 您可以從服務器訪問數據庫,讓服務器對用戶進行身份驗證,並驗證他們是否有權訪問該應用程序。

您可以作弊並嘗試在客戶端應用程序中“隱藏”數據庫憑據,但這是默默無聞的安全性,任何具有某些編程技能或類似技能的人都可以找到數據庫的憑據並直接連接到數據庫。

我不希望用戶在沒有我的應用程序的情況下訪問數據庫

如果您的應用程序將通過Windows文件共享直接訪問SQLite數據庫,則這是不可能的。 當然,你可以讓它變得不方便,但它確實不可能。

實現這一目標的唯一方法是引入一些中間件。

這通常是一個服務(可能是WCF),它偵聽來自客戶端應用程序的連接,對它們進行身份驗證,並管理對底層數據庫的所有訪問。 數據庫將存儲在僅對服務器可見的位置,並且不會通過Windows共享顯示給用戶。

此外,SQLite不是多用戶系統的絕佳選擇。 你可以在這里一舉兩得 - 切換到DBMS(MS SQL Server Express是免費的,也是MySQL,PostgreSQL是常見的自由選擇),通過網絡接受客戶端連接,並構建你的應用程序直接連接到數據庫服務器(使用集成的Windows身份驗證也可能是這樣的,因此您可以避免顯式登錄)。 在一個簡單的場景中,這可能是足夠的,並且可以避免您需要構建顯式服務層。

在更復雜的場景中,在應用程序和數據庫之間建立中間件層仍然是有意義的 - 這樣,您可以在不更改應用程序設計和部署到所有客戶端計算機的情況下更改數據庫設計 - 而只需更改中間件層在一個地方,你的應用程序將不知道差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM