¿Qué estructura de datos usaría / ha usado para almacenar las ACL dentro de un sistema híbrido ACL / RBAC?

9

En nuestro sistema, cada recurso tiene una lista de control de acceso (ACL), que enumera las entradas (ACE) que tienen un tipo específico de acceso a ese recurso. El ACE puede ser para entidades finales (por ejemplo: usuarios como "Mr Q") o entidades de grupo (por ejemplo: "Atlántico Norte"); la inclusión de las entidades del grupo hace que este sea un sistema híbrido ACL / RBAC.

Datos de 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))

Cualquier cosa que no aparezca en la ACL será denegada y DENY anulará cualquier otra cosa.

Información del sistema

Hay un servidor central en línea que media el acceso a dichos recursos. Las escrituras en la ACL serán raras, principalmente se leerán (quizás en una proporción de 1:50 o más).

Question

¿Cuál es una estructura de datos adecuada para almacenar la ACL anterior? El almacenamiento de toda la ACL como una sola cadena JSON en un almacén NoSQL parece simple, pero también podemos normalizar los datos de ACL y almacenarlos en las tablas SQL. Si alguien tiene experiencia operativa sobre las ventajas y desventajas de cualquiera de los enfoques, me gustaría saber de ellos. También nos preguntamos si vale la pena explorar almacenando esto en LDAP, pero quería permanecer alejado de X.500 / DER y otras tecnologías de telecomunicaciones ... quizás haya opciones modernas de LDAP (enraizadas en el mundo CS) para explorar más allá de NoSQL / SQL ?

    
pregunta Cat Nap 24.12.2013 - 22:01
fuente

1 respuesta

2

La mejor manera de estructurar una ACL es como una máscara de bits que facilita la determinación rápida de derechos de acceso complejos para un recurso.

La mejor forma de almacenar que puede ser un almacén de valor clave como Redis o cualquier tecnología de almacenamiento en caché de objetos que se integre bien con su entorno. La decisión de elegir NoSQL vs SQL sería más una decisión de negocios o de TI que una técnica, ya que una simple búsqueda podría ser igual de rápida.

Por supuesto, LDAP también sería una excelente manera de hacerlo, pero no tiene mucho sentido a menos que esté integrando permisos con algún otro sistema.

    
respondido por el Mark Burnett 07.01.2014 - 22:29
fuente

Lea otras preguntas en las etiquetas