使用Filesystem&;SQL数据库

本文关键字:SQL 数据库 amp Filesystem 使用 | 更新日期: 2023-09-27 18:00:50

我正在尝试为我的winforms应用程序创建一个文档管理器。它不是基于网络的。

我希望能够允许用户将文档"附加"到我的应用程序中的各种实体(人员、公司、工作订单、任务、批量零件等(。

经过大量研究,我决定使用文件系统来存储文件,而不是SQL中的blob。我会设置一个文件夹来存储所有文件,但我会将文档信息(文件路径、上传者、更改者、修订等(以与实体的父子关系存储在sql数据库中。

我只希望用户能够通过应用程序处理文档,以防止文件和数据库记录不同步。我知道如何保护文档文件夹不受普通用户的影响,同时允许应用程序使用它。我最初的想法是用唯一可以访问文件夹的用户名和密码设置应用程序,并使用模拟登录到文件夹并使用文件。从我最近开始的一个帖子中的反馈来看,我现在认为这不是一个好主意,模仿一直是一个令人头疼的问题。

我也想过使用Web服务,但我们的一些客户只是在没有windows服务器的笔记本电脑上运行应用程序。大多数都使用windows服务器或citrix/windows服务器。

最好的设置方式是什么,这样只有应用程序才能处理文档?

使用Filesystem&;SQL数据库

我知道你说过你读过关于Blob的文章,但你知道SQL Server 2008及以后版本中的FILESTREAM选项吗?基本上,您可以使用事务性NTFS将Blob保存到NTFS文件系统,而不是将Blob保存在数据库中(这并不总是一个好主意(。在我看来,这听起来正是你想要实现的目标。

所有的文件访问安全性都将通过SQL server处理(因为它是唯一需要访问文件夹的东西(,并且您不需要编写自己的逻辑来添加和删除文件系统中的文件。要从文件系统中删除文件,只需删除sql server表中的相关记录,它就可以处理从文件系统删除该记录。

参见:

http://technet.microsoft.com/en-us/library/bb933993.aspx

选项1(简单(:通过不安全实现安全

让每个人都可以对您的文档目录进行读(写(访问。将您的文档"路径"保存为完整的URI(''''servername''dir1''dir2''dir3''file.ext(,这样您的用户就可以访问这些文件,但如果有人在映射的驱动器中漫游,这些文件不会立即可用。

选项2(更难(:从SQL Server 提供文件

您可以使用CLR函数或SQLDMO从磁盘读取文件,将其呈现为varbinary字段,然后在客户端重新构建。好处是你的用户会看到一个副本,而不是真实的东西;使查看更加安全,编辑和保存更加困难。

享受!;-(

我会选择这些选项,没有特别的顺序。

  1. 在服务器上创建用户无法访问的文件夹。在服务器上运行web服务(使用IIS或独立的WCF应用程序(,该服务具有上载&下载文件。您的web服务应该管理存储文件的目录。SQL数据库应该具有查找文档所需的所有元数据。通过这种方式,只有您的应用程序才能访问这些文件。因此,用户只能通过应用程序查看文档。

  2. 我可以看到您选择将文档存储在文件系统中。我写了一个类似的系统(例如,客户/订单/销售人员的附件等(,只是我将其存储在SQL Server中。它实际上运行得很好。起初我担心过多的数据会降低数据库的速度,但事实并非如此。它工作得很好。如果你走这条路,我能给你的唯一建议是为你的所有附件创建一个单独的数据库。为什么?因为如果你想获得RDBMS的副本用于本地测试,你不想复制一个由1GB实际数据和299GB附件组成的300GB数据库。

  3. 你提到你的一些用户将携带笔记本电脑。在这种情况下,它们可能没有连接到局域网。如果是这样的话,我会考虑将文件(可能还有元数据本身(存储在云中(EC2、Azure、Rackspace等(