Groups Are Bad

Overview#

Groups are a container with for LDAP Entries (or really pointers to LDAP Entries)

If LDAPWiki think of how applications work with LDAP. Typically an application will do one the following:

Using Groups#

If an application is using Groups to manage users, the application must:

This could imply:

Using Attribute Values#

So, to make it easy for the user, the application asks for some type of short name. The application would then: Using groups requires the LDAP application to deal with two objects. Using an attribute value, deals only with he user entry.

Why do we use Groups?#

There are two reasons:

What Do Groups provide?#

When we look at a user, if it is eDirectory and all things are correct, we can see what GroupMemberships the user is a member of.

When we look at a group, we can see who is a member of the group.

Cyclic Inheritance#

Cyclic Inheritance is an issue with LDAP Groups and other Access Control Models

Some Alternative Approaches#

Role Based Access Control#

Application Attribute#

Perhaps a better approach maybe to assign an attribute to every application that needs to control access to their application that can not be performed by existing attribute values.

Advantages of the Application Attribute#

The attribute would be created in the schema and then added to an appropriate auxillaryClass that is, or could be associated with the user entries.

The application owner or ID Administration team would then be able to populate that attribute with appropriate values on the user entry.

The attribute, if not single-valued, would allow multiple entries to be made to correspond to the applications needs. As an example, a user entry maybe populated with values of "user" and "admin". This could indicate the user entry is able to perform user roles and admin roles for the application.

What Can Application Base Attributes Provide#

When we look at a user we can see what values the ApplicationAttribute are provided.

If we want a list of users which possess an ApplicationAttribute value, we could do a search with (ApplicationAttribute=value). The results are all entries with the desired value.

On LDAP Compares, asking if a ApplicationAttribute=value when doing a LDAP compare returns true, if the value is present, or false if the value is NOT present.

Even simpler, if an Application attribute is protected by application interfaces, then a single attribute for all applications maybe used. as an Example:

   app1:admin
   app2:user
   app3:manager
One attribute that provides roles for more than one application. If a custom front end is used to protect who can change the one application attribute, this may be all that is needed.

References from other on issues with Groups#

More Information#

There might be more information for this subject on one of the following: