**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.

{
    boost::hash_combine(seed, base_dn);
    boost::hash_combine(seed, static_cast<int>(scope));
    boost::hash_combine(seed, search_filter);
    boost::hash_combine(seed, attribute);
    boost::hash_combine(seed, prefix);
}
void LDAPClient::Params::combineCoreHash(std::size_t & seed) const
{
    boost::hash_combine(seed, host);
    boost::hash_combine(seed, port);
    boost::hash_combine(seed, bind_dn);
    boost::hash_combine(seed, user);
    boost::hash_combine(seed, password);
}
LDAPClient::LDAPClient(const Params & params_)
    : params(params_)
{
}
LDAPClient::~LDAPClient()
{
    closeConnection();
}
#if USE_LDAP
namespace
{
    std::recursive_mutex ldap_global_mutex;
    auto escapeForLDAP(const String & src)