【问题标题】:Avoiding accessing unauthorized data - architectural level避免访问未经授权的数据 - 架构级别
【发布时间】:2021-07-25 18:34:01
【问题描述】:

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

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

【问题讨论】:

    标签: .net design-patterns database-design architecture system-design


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解释,仅提及关键字“多租户”对我有很大帮助,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2011-09-15
    • 2020-05-27
    • 1970-01-01
    • 2016-08-12
    • 2014-07-01
    相关资源
    最近更新 更多