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

{
public:
    struct SearchParams
    {
        enum class Scope
        {
            BASE,
            ONE_LEVEL,
            SUBTREE,
            CHILDREN
        };
        String base_dn;
        Scope scope = Scope::SUBTREE;
        String search_filter;
        String attribute = "cn";
        String prefix;
        void combineHash(std::size_t & seed) const;
    };
    using SearchParamsList = std::vector<SearchParams>;
    using SearchResults = std::set<String>;
    using SearchResultsList = std::vector<SearchResults>;
    struct Params
    {
        enum class ProtocolVersion