如何隔离数据库中的数据

时间:2012-08-30 07:33:02

标签: database view schema

我有一个像这样的结构表:

ProjectID | Field1 | Field2 | Field3 | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
2         | aaa    | aaa    | aaa    | ...
------------------------------------------
3         | aaa    | aaa    | aaa    | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
2         | aaa    | aaa    | aaa    | ...

以及一些需要访问此表以读取数据并在流程和处理中写回一个值的外部系统。

问题是每个外部系统都必须只访问与他的项目相关的数据,即I.E。:

  • 系统1 - > ProjectID = 2
  • 系统2 - > ProjectID = 3
  • 系统3 - > ProjectID = 1

我希望将这些数据分开以避免错误,因为这些系统将从我们的应用程序外部开发,我不能假设他们只使用他们的数据。

我遇到了两个解决方案:

  1. 为不同数据库架构中的每个ProjectID创建一个表,并为每个外部系统仅提供访问其表的凭据。
  2. 为每个仅为特定项目提取数据的ProjectID创建可更新视图,并为每个外部系统仅提供访问其视图的凭据。
  3. 还有其他想法吗?

    谢谢!

3 个答案:

答案 0 :(得分:0)

如果您有多个与之交互的项目,您确实需要开发一个与数据库进行所有交互的API。保持您的理智,睡眠时间表和数据完整性。请勿在数据库层中解决此问题。

答案 1 :(得分:0)

因此,如果我关于API的其他答案对您不起作用,那么安全处理此问题的适当方法是完全分离数据。不要混合行或在同一个表(或最好是数据库)中存储任何内容。

我会创建一个特定于客户端的数据库,并让每个外部系统只能访问该数据库。

您是否需要在某个时候合并数据?如果是这样,您将失去密钥完整性,因为您将在每个数据库表中拥有相同的PK(大多数)。

如果您确实需要合并数据,并且不能选择多列密钥,那么可更新视图确实是您唯一的选择,以便您可以保持这种完整性。

答案 2 :(得分:0)

只是一些好意的......

我正在努力解决类似的问题。我目前的解决方案是我有一组表,但每个记录都有一个引用OrganizationID的列。我的外部程序然后附加在SQL Select ... Where ...和User.OrganizationID = table.OrganizationID中。

当一个人,父组织的负责人查看数据时,我不附加sql,以便他们可以看到跨越所有子组织的数据。

这个解决方案与可更新的视图没有太大的不同(除了我有一个处理它的应用程序)。我也在寻找更好的解决方案,因为我的一些数据可能跨越几个应该与其他数据交互的组织(例如,Project1和Project2可以互相交互数据但项目3是隔离的,而Project 4可以看到所有这些)< / p>