2012-11-15 93 views
1

我在c#中编写了一个应用程序SQLite用于存储拥有大约500名员工的公司中所有员工的数据。我想将数据库&应用程序放在文件服务器/共享文件夹(MS服务器)中。然后,所有员工将在其桌面上拥有该应用程序的快捷方式。我想根据用户运行应用程序的权限来启用/禁用一些输入字段(文本框)。最佳做法是什么?通过C#应用程序访问服务器中的文件

我希望用户只能通过我的应用程序读取/写入数据库(应用程序位于同一数据库文件夹中)。我不希望用户在没有我的应用程序的情况下访问数据库。怎么做?

+0

坏主意。 SQLLite不适合这个。使用可作为数据库服务器运行的数据库引擎(SQL Server,Oracle,PostgreSQL ...),并将该应用程序部署到每台客户机,而不是使用网络共享。更好的办法是去建立一个三层架构,但是因为你已经编写了这个应用程序,现在可能工作太多了。 – jeroenh

+0

“我不希望用户在没有我的应用程序的情况下访问数据库。” - 这是您选择的数据库引擎无法实现的。完整的数据库服务器可能是一个不错的选择。 –

回答

2

我不希望用户在没有我的应用程序

到达数据库如果您的应用程序将直接通过Windows文件共享访问SQLite数据库,这是不可能的。当然,你可以让它变得不方便,但这不是真的可能。

实现这一目标的唯一方法就是引入一些中间件。

这通常是一个服务(WCF也许),它监听来自客户端应用程序的连接,验证它们并管理对底层数据库的所有访问。数据库将存储在只对服务器可见的位置,并且不会通过Windows共享向用户显示。

另外,对于多用户系统,SQLite并不是一个很好的选择。您可以在这里一箭双雕 - 切换到DBMS(MS SQL Server Express是免费的,也是MySQL,PostgreSQL是常用的免费选择),它通过网络接受客户端连接,并构建应用程序以直接连接到数据库服务器(使用集成的Windows身份验证也可能是这样的,所以你可以避免明确的登录)。在一个简单的情况下,这可能是足够的,并避免你需要建立一个明确的服务层。

在一个更复杂的情况下,在应用程序和数据库之间建立一个中间件层仍然有意义 - 这样,您可以更改数据库设计而无需更改应用程序设计并部署到所有客户机 - 相反,只需在一个地方更改中间件层,应用程序就不会知道其中的差别。

+0

MS SQL Server Express不是最好的多用户系统,它当然不是500个用户的不错选择。 SQL Server的完整副本当然是一个选项。如果用户需要他们机器上的数据库副本才能正常工作,MS SQL Server Express将会很好。 –

+0

@Ramhound:'postgresql'是不错的选择? – Aan

+0

实际上,对于500个用户来说,没有任何关于SQL Express的信息 - 如果数据库不大,并且计算要求不是很大。对于一个小而简单的数据库,在合理能力的硬件上,SQL Server Express对于500个用户来说就可以。 – tomfanning

2

如果您不希望用户访问数据库,则应创建客户端服务器体系结构。

您可以在与文件服务器(作为Windows服务运行)相同的机器上运行服务,并使用WCF在服务器和客户端之间进行通信。您可以从服务器访问数据库,并让您的服务器验证您的用户并验证他们是否有权访问该应用程序。

您可以在您的客户端应用程序中作弊并尝试“隐藏”数据库凭证,但这是安全隐晦的,任何具有编程技能或类似功能的人都可以找到数据库的凭据并直接连接到数据库。

相关问题