文件与数据库

时间:2009-02-10 14:32:54

标签: database file text acl

我将为每个用户实施一个访问控制列表,这样他们就可以分配对自己资源的访问权限,这样他们就可以隐藏自己的东西,例如,从母亲那里隐藏东西,但是可以向朋友展示。

现在将ACL存储在数据库中似乎在每个用户也是一个组时会变得非常疯狂,这个组可以有许多子组。所以我在考虑将ACL内容存储在文本文件中。

好主意?坏主意?

编辑:我应该注意,我正在谈论每个用户的单独文本文件。我正在考虑创建一个ACL类,我可以序列化并写入文本文件。我担心将ACL存储在数据库中会产生极其庞大的连接表,并对数据库服务器造成很大的压力。

6 个答案:

答案 0 :(得分:3)

给定选项我会将ACL存储在数据库中:

  • 访问和查询数据的语言更简单,更标准(SQL)
  • DB将为您提供事务,快速查询索引,完整性约束和安全性。
  • 根据您在本地文件中存储数据的方式,您可能需要将数据文件与应用程序一起移动。例如:将应用程序从server1移动到server2。
  • 对于不可变的数据(或不经常更改),应使用某种形式的缓存。因此,如果您使用的是文件或数据库,则应该在一段时间内缓存部分数据。
  • 我非常确定您可以找到关系数据库的良好ACL模式模板,您可以将其用作参考,例如此文档:http://edhs1.gsfc.nasa.gov/waisdata/v2r20/ps/cd31110001.ps

我希望它有所帮助。

答案 1 :(得分:0)

我不确定如何将它存储在文本文件中更容易。数据的关系是相同的。当然,SQL并不总是友好的分层数据,但它们都不是平面文本文件。

答案 2 :(得分:0)

您的文本文件是否受到并发访问保护?否则,数据库将是一个更好的主意。

答案 3 :(得分:0)

XML是分层数据的理想选择。虽然可以在数据库中使用分层数据,但这解释了它的精确程度(这些概念不仅适用于MySQL):

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

我个人不会在文本文件中存储这样的数据。操纵变得更加困难。

答案 4 :(得分:0)

并发会咬你。随着文件变大,复杂性和性能也会降低。在写入文件期间发生某些事情的腐败风险也会增加,如系统崩溃的电源丢失。

数据库通常会使您免受这些问题的影响,让您专注于逻辑

您可以使用自联接实现数据库中的分层存储,例如

ItemID    Data   ParentID
--------------------------

其中ParentID是指向不同行的ItemID的指针

答案 5 :(得分:0)

  

我担心的是将ACL存储在   数据库会创造巨大的数据   连接表并放一个重要的   压力在数据库服务器上。

每个用户只有一个文本文件,而您的组/子组可能位于其他一些文件中,您将不得不滚动自己的联接,不是吗?

您所描述的问题/要求正是SQL的优点所在。毫无疑问,SQL是适合这项工作的工具。