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

const ExternalAuthenticators & external_authenticators, LDAPClient::SearchResultsList & search_results) const
{
    if (!credentials.isReady())
        return false;
    if (credentials.getUserName() != user.getName())
        return false;
    if (const auto * basic_credentials = dynamic_cast<const BasicCredentials *>(&credentials))
        return external_authenticators.checkLDAPCredentials(ldap_server_name, *basic_credentials, &role_search_params, &search_results);
    return false;
}
const char * LDAPAccessStorage::getStorageType() const
{
    return STORAGE_TYPE;
}
String LDAPAccessStorage::getStorageParamsJSON() const
{
    std::scoped_lock lock(mutex);
    Poco::JSON::Object params_json;
    params_json.set("server", ldap_server_name);
    Poco::JSON::Array common_role_names_json;
    for (const auto & role : common_role_names)
    {
        common_role_names_json.add(role);
    }
    params_json.set("roles", common_role_names_json);
    Poco::JSON::Array role_mappings_json;