在我们的系统中,每个资源都有一个访问控制列表 (ACL),其中列出了对该资源具有特定类型访问权限的条目 (ACE)。ACE 可以用于终端实体(例如:像“Mr Q”这样的用户)或组实体(例如:“北大西洋”);包含组实体使其成为混合 ACL/RBAC 系统。
ACL 数据
Resource #1 => ACL
ACL => ACE#1 Entity(Type:User, ID:006), Rights(~Read, ~Write)) /* Deny */
ACE#2 Entity(Type:User, ID:007), Rights(Read, Write))
ACE#3 Entity(Type:User, ID:101), Rights(Write))
ACE#4 Entity(Type:Group, ID:A01), Rights(Read, Write))
ACE#5 Entity(Type:Group, ID:B04), Rights(Read, Write))
任何未出现在 ACL 上的内容都将被拒绝,并且 DENY 会否决其他任何内容。
系统信息
有一个中央在线服务器调解对所述资源的访问。对 ACL 的写入很少见,主要是读取(可能以 1:50 或更高的比率)。
问题
存储上述 ACL 的合适数据结构是什么?将整个 ACL 作为单个 JSON 字符串存储在 NoSQL 存储中似乎很简单,但我们也可以规范化 ACL 数据并将其存储在 SQL 表中。如果有人对这两种方法的优缺点有操作经验,想听听他们的意见。我们还想知道是否值得探索将其存储在 LDAP 中,但希望远离 X.500/DER 和其他电信来源技术……也许有现代 LDAP 选项(植根于 CS 世界)可以探索 NoSQL/SQL 之外?