**Use case**
In some organisations are using AD with hierarchical structure (nested organisation unit) and DN follow this structure. As result we can not  use permanent build_dn for users with different OU.

**Describe the solution you'd like**
Solution can be look like:
1) bind as service account
2) set dn for user_name by some filter string to user_dn
3) bind as user_dn with password
3) use user_dn with filter for group/roles fetching

This approach is implemented in Metabase.

cache.erase(eit);
                }
                
                if (cache.empty())
                    ldap_caches.erase(cit);
            }
        }
    }
    LDAPSimpleAuthClient client(params.value());
    const auto result = client.authenticate(search_params, search_results);
    const auto current_check_timestamp = std::chrono::steady_clock::now();
    
    if (result)
    {
        std::scoped_lock lock(mutex);
        
        const auto pit = ldap_client_params_blueprint.find(server);
        if (pit == ldap_client_params_blueprint.end())
            return false;
        auto new_params = pit->second;
        new_params.user = credentials.getUserName();
        new_params.password = credentials.getPassword();
        std::size_t new_params_hash = 0;
        new_params.combineCoreHash(new_params_hash);
        if (search_params)
        {
            for (const auto & params_instance : *search_params)
            {
                params_instance.combineHash(new_params_hash);
            }