sql - 为每个用户创建 SQL 表作为安全措施
问题描述
我已经研究过这个主题,并且在大多数实践中我相对确定答案是“否”,但我想针对我的案例提出一些第二意见。
我们目前正在开发一个多用户网络应用程序,每个用户基本上在网络应用程序中都有自己的副本“门户/应用程序”。我担心的不是性能,而是安全性。
我正在考虑使用前缀 userid_table1、userid_table2 对数据进行分区,以使其更易于管理,并确保开发团队不会进行安全验证监督,因为我们可以轻松添加验证以确保只能针对具有 userid_ 的表运行查询*。
你还会反对这种方法吗?
解决方案
我正在考虑使用前缀 userid_table1、userid_table2 对数据进行分区,以使其更易于管理,并确保开发团队不会对安全验证进行监督,因为我们可以轻松添加验证以确保只能针对具有 userid_ 的表运行查询*。
更易于管理?这听起来像个笑话。您的数据库最终将拥有无数不同的表。 您想要对所有用户执行的任何操作都将是一场噩梦:
- 声明外键约束。
- 在表上定义新索引。
- 添加新列。
- 重组表。
- 等等。等等。
您的用户可能仅限于一个表。但是应用程序开发人员和 DBA 需要处理所有这些问题。想到试图找出这样一个系统中的性能瓶颈在哪里,我感到畏缩。
我应该补充一点,数据库针对大表而不是很多表进行了优化,因此多个表通常效率较低。当您考虑所有这些表中的所有半填充页面时,效率甚至更低。
相同的实体不应分布在多个表中,除非您有非常非常好的理由。这不是一个很好的理由。一种简单的解决方案是阻止用户访问基表。只需让他们访问视图或用户定义的表函数 - 并让所有这些过滤器过滤用户 ID。
在某些极端情况下,您确实希望为每个用户提供单独的表。通常,每个用户都有一个非常复杂的表(想想 B2B 应用程序),事实上,他们可能有自己的数据库。分离数据可能还有法律要求。但是,在这些情况下,“分离性”通常是在数据库级别,而不是表级别。
推荐阅读
- python - /usr/bin/python3:没有名为 pytest 的模块
- twincat - 具有完全访问权限的 TwinCAT 3.1 fCoE 读写
- git - Docker 在 gitlab CI 中构建当前 git 分支
- hid - iOS 主页按钮的 HID 描述符 + 报告?
- mysql - 解决导入数据库上的特定 mysql 错误
- python - 如何在 SQLAlchemy 中使用 PostgreSQL 的 jsonb_to_record?
- java - 检查Java列表中是否有连续点大于阈值
- javascript - client.elements 不能从使用 nightwatch-api 的步骤定义中工作
- java - 如何从用于 addValueEventListener 的 for 循环内的查询中获取字符串值
- java - 在 Kubernetes 集群上运行时,Solace JMS 通道自行关闭(Spring Boot)