3

我将为每个单独的用户实现一个访问控制列表,以便他们可以分配对自己资源的访问权限,以便他们可以隐藏东西,例如,对他们的母亲,但向他们的朋友展示。

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

好主意?馊主意?

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

4

6 回答 6

3

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

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

我希望它有所帮助。

于 2009-02-10T15:31:13.550 回答
0

我不确定将它存储在文本文件中是否更容易。数据的关系是一样的。当然,SQL 并不总是友好的分层数据,但也不是纯文本文件。

于 2009-02-10T14:37:02.557 回答
0

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

于 2009-02-10T14:37:23.757 回答
0

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

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

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

于 2009-02-10T14:43:33.633 回答
0

并发会咬你。随着文件变大,复杂性和性能也会降低。在写入文件期间会增加损坏某些东西的风险,例如系统崩溃的断电。

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

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

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

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

于 2009-02-10T15:07:36.820 回答
0

我担心将 ACL 存储在数据库中会创建异常巨大的连接表,并对数据库服务器造成巨大压力。

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

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

于 2009-02-14T12:47:31.287 回答