Citando o guia de administração do OpenLDAP :
The order of evaluation of access directives makes their placement in the configuration file important. If one access directive is more specific than another in terms of the entries it selects, it should appear first in the config file. Similarly, if one selector is more specific than another it should come first in the access directive.
Para encurtar a história, tente o seguinte:
access to attrs=userPassword
by dn.base="cn=admin,dc=my-company,dc=de" write
by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
by self write
by anonymous auth
by * none
# Allow everybody adding and changing Contacts
access to dn.subtree="ou=Contacts,dc=my-company,dc=de"
by dn.base="cn=admin,dc=my-company,dc=de" write
by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
by * read
access to *
by dn.base="cn=admin,dc=my-company,dc=de" write
by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
by self write
by * read
BTW, você realmente deseja conceder a todos os usuários acesso a todos os atributos de seu próprio objeto (' acesso a * ... por auto-gravação ')? Como você está limitando o acesso de gravação ao atributo userPassword somente na primeira ACL, eu diria que não é o que você queria.