Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 避免访问未经授权的数据-体系结构级别_.net_Design Patterns_Database Design_Architecture_System Design - Fatal编程技术网

.net 避免访问未经授权的数据-体系结构级别

.net 避免访问未经授权的数据-体系结构级别,.net,design-patterns,database-design,architecture,system-design,.net,Design Patterns,Database Design,Architecture,System Design,我有一个SQL Server数据库,其中包含多个客户的数据每个客户都有管理用户来管理自己与员工相关的数据,我将授予每个客户使用系统存储和管理其业务数据(与其员工相关的数据)的许可证每个员工都有一个帐户,并有一些权限执行某些特定操作和请求 我的问题,如何永久阻止客户管理员用户访问其他客户的员工?我想了解与系统架构级别相关的避免此类错误的最佳做法或想法,我不想把决定权留给开发人员,因为任何错误的SQL查询都会导致这个问题。在数据库级别有两种主要的多租户方法,它们有着非常不同的权衡: 逐行租户:这基本

我有一个SQL Server数据库,其中包含多个客户的数据每个客户都有管理用户来管理自己与员工相关的数据,我将授予每个客户使用系统存储和管理其业务数据(与其员工相关的数据)的许可证每个员工都有一个帐户,并有一些权限执行某些特定操作和请求


我的问题,如何永久阻止客户管理员用户访问其他客户的员工?我想了解与系统架构级别相关的避免此类错误的最佳做法或想法,我不想把决定权留给开发人员,因为任何错误的SQL查询都会导致这个问题。

在数据库级别有两种主要的多租户方法,它们有着非常不同的权衡:

  • 逐行租户:这基本上需要将客户id或租户id列放入每个数据库表中,并确保所有查询都将此作为其选择标准的一部分。如果您不信任开发人员(您已经有麻烦了),您可以将他们隐藏在存储过程后面(不推荐,只需为开发人员制定规则)
  • 模式租户:模式租户更安全,但成本更高。它需要为每个租户提供一个新的模式。每个租户都有自己的SQL Server连接,他们的查询转到他们的模式。这具有绝对防止跨客户读取的优势,但实现成本要高得多。添加新租户时,需要在运行时执行DDL,升级的成本要高得多(您必须根据您拥有的客户数量升级数十个/数百个/数千个数据库架构。此外,SQL Server在处理这么多小的表时的性能也不会很好。统计数据/备份/维护成本更高,更难管理

  • 在数据库级别,有两种主要的多租户方法,它们具有非常不同的权衡:

  • 逐行租户:这基本上需要在每个数据库表中输入一个客户id或租户id列,并确保所有查询都将此作为其选择标准的一部分。如果您不信任开发人员(您已经遇到了麻烦),您可以将其隐藏在存储过程后面(不推荐,只为开发人员制定规则)
  • 逐架构租户:逐架构租户更安全,但成本更高。这需要为每个租户提供一个新的架构。每个租户都有自己的SQL Server连接,并且他们的查询转到他们的架构。这具有绝对防止跨客户读取的优势,但实现起来成本更高。它需要执行添加新租户时在运行时使用DDL,升级成本要高得多(您必须根据您拥有的客户数量升级数十个/数百个/数千个数据库架构。此外,SQL Server在处理这么多小的表时的性能也不会很好。统计数据/备份/维护成本更高,更难管理

  • 谢谢你的解释,仅仅提到关键词“多租户”对我帮助很大,谢谢:)谢谢你的解释,仅仅提到关键词“多租户”对我帮助很大,谢谢:)