.net 将文件存储在数据库中而不是存储在文件服务器上。如果我想应用自定义权限,谁可以查看文件

.net 将文件存储在数据库中而不是存储在文件服务器上。如果我想应用自定义权限,谁可以查看文件,.net,asp.net-mvc,entity-framework,asp.net-core,database-design,.net,Asp.net Mvc,Entity Framework,Asp.net Core,Database Design,我正在开发一个asp.net mvc核心web应用程序,该应用程序以实体框架作为数据访问层。我在我们的应用程序中有一个文档管理模块,用户可以在其中上载文件,如“MS Office”、PDF、图像等然后,他们可以为每个文件设置权限>>公共文件,以便所有注册用户都可以查看该文件,或者仅特定用户可以查看该文件(他们可以从注册用户列表中选择用户) 现在,我们有两种在asp.net mvc内核中存储和管理文件的方法:- 将文件存储在主机服务器上的文件夹中 将文件存储在我们的数据库中 因此,我不确定哪种方法

我正在开发一个asp.net mvc核心web应用程序,该应用程序以实体框架作为数据访问层。我在我们的应用程序中有一个文档管理模块,用户可以在其中上载文件,如“MS Office”、PDF、图像等然后,他们可以为每个文件设置权限>>公共文件,以便所有注册用户都可以查看该文件,或者仅特定用户可以查看该文件(他们可以从注册用户列表中选择用户)

现在,我们有两种在asp.net mvc内核中存储和管理文件的方法:-

  • 将文件存储在主机服务器上的文件夹中
  • 将文件存储在我们的数据库中
  • 因此,我不确定哪种方法更适合我们?特别是我们可以选择对每个文件应用自定义权限。。那么,将文件存储在数据库中是否更好?此外,将来我们可能允许最终用户指定是否要将文件加密作为第二级安全性

    第二个问题。如果我将文件存储在数据库中,那么用户是否可以将文件下载到其本地计算机?并使用单独的URL查看文件?
    谢谢

    TL;DR:AFAICT,权限问题不应该影响您的选择。调查将文件存储在磁盘或数据库中是否是正确的做法,忽略权限问题,您将得到答案

    无论将文件存储在何处,都必须将权限存储在数据库中,并在ASP.NET应用程序中强制执行这些权限。现在,要么你

    • 将每个文件存储在数据库中,指针指向权限,或
    • 在数据库中存储每个文件的名称,指针指向权限,指针指向主机服务器上的文件
    当收到文件请求时,ASP.NET应用程序将在数据库中查找权限并对其进行评估。如果权限检查失败,它将向客户端返回一个错误。如果权限检查成功,它将从数据库或文件系统检索文件。因此,归根结底,文件系统还是数据库是最好的解决方案,而忽略了权限问题


    请参阅以了解利弊。

    对于非许可部分,这可能是相关的:@Rune感谢您的链接,我已经看过这篇文章,但这是两种方法之间的一般比较,但我的问题更具体到我描述的案例。好的,谢谢您宝贵的回复。因此,将文件存储在我们的数据库或文件系统中不会对其应用自定义权限产生任何影响。。我认为将文件存储在数据库中只允许我控制谁可以访问这些文件。。但我认为最终用户不能直接从托管服务器请求文件,因此任何访问文件的请求都必须通过系统,我可以相应地控制权限。现在我应该已经提到的一点是,我们的一些文件包含法律协议和机密信息,我们可能需要将它们作为第二级安全性进行加密,那么加密文件是否有利于一个选项(数据库或文件系统)而不是另一个?我不认为加密会改变图片,但我们仍然可以对文件系统中的文件存储进行加密和解密吗?对于文件系统,加密文件只是另一个文件,因此,我们可以肯定地将其存储在文件系统中。至于推荐什么,我对您的使用场景还不太了解。正如在另一个答案中提到的,这取决于数据的使用方式、性能的重要性、文件的大小、数据库等。